o
    Ö­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ya   dZY nw d
Z zddl!Z!ddl"m#Z$ W n ey{   dZ Y nw 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/ej0j1d(d)„ ƒZ2d*d+„ Z3ej0j1d,d-„ ƒZ4d.d/„ Z5d0d1„ Z6dZ7dZ8dZ9dZ:dZ;G d2d3„ d3ƒZ<ej0 =d4¡G d5d6„ d6e<ƒƒZ>ej0 =d4¡G d7d8„ d8e<ƒƒZ?ej0 =d4¡G d9d:„ d:e<ƒƒZ@G d;d<„ d<e<ƒZAG d=d>„ d>e>ƒZBG d?d@„ d@e>ƒZCG dAdB„ dBe>ƒZDG dCdD„ dDe?ƒZEe �r7G dEdF„ dFe?ƒZFe�rBG dGdH„ dHe?ƒZGG dIdJ„ dJe?ƒZHG dKdL„ dLe?ƒZIej0 =d4¡G dMdN„ dNƒƒZJG dOdP„ dPe@ƒZKG dQdR„ dRe@ƒZLG dSdT„ dTeAƒZMG dUdV„ dVeAƒZNG dWdX„ dXƒZOej0 =d4¡G dYdZ„ dZƒƒZPG d[d\„ d\ePƒZQG d]d^„ d^ePƒZRG d_d`„ d`ePƒZSej0 =d4¡G dadb„ dbƒƒZTG dcdd„ ddeTƒZUG dedf„ dfeTƒZVG dgdh„ dheTƒZWd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   ú^/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_linprog.pyÚ_assert_iteration_limit_reached!   s   r   c                 C   ó    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'   ó   r   c                 C   r   )Nr   é   z!failed to report unbounded statusr   r   r   r   r   Ú_assert_unbounded-   r    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   sn   | j sd| j› d| j› �}t|ƒ‚t| jdƒ |d ur%t| j|d||d� |d ur5t| j|d||d� d S 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   þ
þÿr2   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¡ q:t| ƒD ]"}t| ƒD ]}	| ¡ }d|dd…||	f< | | 	¡ ¡ | d¡ qbq\t| ƒD ]&}| ¡ }|dd…|dd…f |dd…|dd…f< | | 	¡ ¡ | |¡ qƒt| ƒD ]&}| ¡ }|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�}| |
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éÿÿÿÿ©Údtype)ÚnpÚrandomÚRandomStateÚarangeÚreshapeÚzerosÚrangeÚcopyÚappendÚflattenÚarrayÚvstackÚfloatÚrandÚshape)ÚnÚrngÚMÚnumbersr;   ÚA_listÚb_listÚiÚA_rowÚjÚAÚbÚcr   r   r   Úmagic_squareQ   sT   ü((0
""ÿ
rQ   c                 C   sê   t j d¡}|j| |fd� }t  | | | f¡}t  | ¡}t| ƒD ]}|d }d|||| || …f< ||  ||< q!t  || | f¡}t  |¡}	t|ƒD ]}|d }d|||d|…f< d|	|< qLt  ||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)	r6   r7   r8   Úexponentialr;   r<   rA   ÚhstackÚravel)ÚmrE   rF   rP   ÚArowÚbrowrM   Új1ÚAcolÚbcolrN   rO   r   r   r   Úlpgen_2d“   s"   


r]   c                 C   s¾   t j | ¡}d\}}}| |¡d }| ||¡d }| |¡d }| ||¡d }| |¡d }	| |¡ }
| |¡}t j |
|
| ¡  k < t j||| ¡ k< t  |
|f¡j}|||||	|fS )N)é
   é   é2   ç      à?)r6   r7   r8   rC   ÚinfrA   ÚT)ÚseedrF   Úm_eqÚm_ubrE   rP   ÚA_ubÚb_ubÚA_eqÚb_eqÚlbÚubÚboundsr   r   r   Úvery_random_gen®   s   

rn   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)r3   é   r$   éúÿÿÿ)éùÿÿÿrq   é   é	   )r   r3   éýÿÿÿr   )r^   éöÿÿÿrq   é   )rr   r3   r!   r$   )rt   rr   rp   rr   )ru   r   r   éøÿÿÿéüÿÿÿ)gkæ¤€‹–²?gòsÚÑð?r   güØkª¾Lá?gŽqY†:^@r   )rP   rg   rh   ri   rj   Úx_starÚf_starr   r   r   Únontrivial_problem¾   s   ý
r{   ro   rs   éd   c                 C   sf  t j | ¡}|jdd||fd�}| |¡}|jdd||fd�}|||  |jdd|d� }t  || ¡}	d|	d|…< tj d| || f¡}
d}t	|ƒD ]<}||dd…|f  |
|d|…f< d|
||| f< d| |dd…|f  |
|d d|…f< d|
|d || f< |d7 }qL|
 
¡ }
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   rR   çñhãˆµøä>Nr   r3   ©NN©r   N)r6   r7   r8   ÚnormalÚrandnÚonesÚscipyÚsparseÚ
lil_matrixr<   Útocscr;   )rd   rW   ÚdrE   rF   ÚphiÚw_truer.   ÚyrP   rg   ÚidxÚiirh   Úbndsr   r   r   Úl1_regression_probÌ   s*   

 (
rŽ   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+   ÚcompleteÚphase©r   r   r   r$   Únitr.   r-   ÚslackÚcon)Úpopr   r<   Ú
isinstanceÚintÚboolÚstr)r   r+   r�   ©Úlast_cbr   r   Úcbó   s   

z!generic_callback_test.<locals>.cbrt   éþÿÿÿr   r   r   ©r^   ro   r$   ©rg   rh   ÚcallbackÚmethodç      2Àrr   ©r/   r0   r-   r.   r”   r“   )r6   r@   r	   r¡   r2   r   ©Úselfrœ   rP   rg   rh   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   ƒ d S 1 sIw   Y  d S )Nrt   r�   r   r   r   rž   úekki-ekki-ekki©rg   rh   r¡   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}©ÚmatchÚ	rr_method©rg   rh   Úoptions)r6   r@   Úassert_raisesÚ
ValueErrorr	   ÚpytestÚwarnsr
   )rP   rg   rh   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 )Nrt   r�   r   r   r   rž   Úhighs©r¡   r¢   rr   r£   )r6   r@   r	   r2   )rP   rg   rh   r   r   r   r   Útest_choose_solver  s
   rµ   c                   C   s¨   t  t¡� tddd� W d   ƒ n1 sw   Y  t  t¡� tddd� W d   ƒ n1 s1w   Y  t  t¡� tddd� W d   ƒ d S 1 sMw   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sFJ ‚| j |¡sNJ ‚ddi}	t ||||d|	d�} d}| jdkseJ ‚| j |¡smJ ‚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s±J ‚| |¡s¸J ‚|
d d ƒ\}}d}|dksÇJ ‚| |¡sÎJ ‚d S )Nr   r³   r´   z6Optimization terminated successfully. (HiGHS Status 7:r   rr   ©r   r   Ú
time_limitçš™™™™™¹?)rP   ri   rj   rm   r¡   r­   Úintegralityz%Time limit reached. (HiGHS Status 13:r   r^   úhighs-ds©rP   ri   rj   rm   r¡   r­   z*Iteration limit reached. (HiGHS Status 14:)r   r3   )rm   r¡   z+The problem is infeasible. (HiGHS Status 8:r   r3   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+   Ú
startswithrQ   ÚlenÚscipy.optimize._linprog_highsrÁ   )r   r1   rN   rO   rP   rH   rG   rm   r¾   r­   rÁ   r   r+   r   r   r   Útest_highs_status_message2  sL   ÿÿrÆ   c                   C   s$   t ddgddggdgddgd� d S )Nr   r3   r   ç      À©rg   rh   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
ejjdd„ ƒZejjdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjdd„ ƒZd d!„ Zd"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„ Z0dVdW„ Z1dXdY„ Z2dZd[„ Z3d\d]„ Z4d^d_„ Z5d`da„ Z6dbdc„ Z7ddde„ Z8dfdg„ Z9dhdi„ Z:djdk„ Z;dldm„ Z<dndo„ Z=dpdq„ Z>drds„ Z?dtdu„ Z@dvdw„ ZAdxdy„ ZBdzd{„ ZCd|d}„ ZDd~d„ ZEd€d�„ ZFd‚dƒ„ ZGd„d…„ ZHd†d‡„ ZIdˆd‰„ ZJdŠd‹„ ZKdŒd�„ ZLdŽd�„ ZMd�d‘„ ZNd’d“„ ZOd”d•„ ZPd–d—„ ZQd˜d™„ ZRejjSeTjUdškd›dœ�d�dž„ ƒZVdŸ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_callback{  s   z LinprogCommonTests.test_callbackc                 C   ó8   t ddƒ\}}}t|||| jddid�}t|dd� d S )Nr_   ÚdispT©rg   rh   r¡   r­   çT¹×é*PÀ©r/   ©r]   r	   r¡   r2   ©r¥   rN   rO   rP   r   r   r   r   Ú	test_disp~  ó
   ÿ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 )Nr3   r$   rt   r   r   rr   r~   ©rt   N)rg   rh   rm   r­   r¡   éêÿÿÿrÒ   )r	   r­   r¡   r2   )r¥   rP   rN   rO   Ú	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   Úhello©ri   rj   r¡   r­   )r®   Ú	TypeErrorr	   r¡   r­   )r¥   rP   ri   rj   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­   rx   r£   )r6   r@   r=   rb   r	   ri   rj   r¡   r­   r2   r   )r¥   rP   rg   Ú	b_ub_origrh   rm   r   r   r   r   Útest_aliasing_b_ubš  ó   
ÿ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£   )r6   r@   r=   rb   r	   rg   rh   r¡   r­   r2   r   )r¥   rP   ri   Ú	b_eq_origrj   rm   r   r   r   r   Útest_aliasing_b_eq§  ræ   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­   r2   ©r¥   rP   rg   rh   ri   rj   rm   r   r   r   r   Útest_non_ndarray_args´  s   ÿz(LinprogCommonTests.test_non_ndarray_argsc                    sr   t  ddg¡}ddgddgddgg}g d¢}	 	 d‡ fdd„	}‡ fd	d
„ˆ jD ƒ}d|d< tt|||||d� d S )Nrt   r�   r   r   r   rž   c              
      s   t | |||||ˆ j|d� d S ©Nrã   ©r	   r¡   )rP   rg   rh   ri   rj   rm   r­   rÌ   r   r   ÚfÇ  s   
ÿz2LinprogCommonTests.test_unknown_options.<locals>.fc                    ó   i | ]}|ˆ j | “qS r   ©r­   ©Ú.0ÚkeyrÌ   r   r   Ú
<dictcomp>Ì  ó    z;LinprogCommonTests.test_unknown_options.<locals>.<dictcomp>é*   Úspamr¬   )NNNNNN)r6   r@   r­   r   r
   )r¥   rP   rg   rh   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 sJw   Y  t j 	|j
dd	g¡ t j 	|jd
¡ d S )Nr3   r   r!   r   ©r   é   rü   r   ©rP   rg   rh   rm   r¡   r¾   çÍÌÌÌÌÌü?çffffff@çffffffÀ)r6   r@   rb   rÄ   Útestingr   r
   r	   r¡   r   r.   r-   ©r¥   rg   rh   rP   rm   r¾   r   r   r   r   Útest_integrality_without_highsÒ  s   
ÿÿz1LinprogCommonTests.test_integrality_without_highsc                    sT  d‡ fdd„	}t t|g d¢ddgd� tj ¡ �}| td¡ t t|g d¢g d¢d� W d   ƒ n1 s5w   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 ršˆ jd ršd S t t|d
dgt d¡d
d� d S )Nc              
      ó    t | |||||ˆ jˆ jd� d S rí   ©r	   r¡   r­   ©rP   rg   rh   ri   rj   rm   rÌ   r   r   rï   ç  ó   
ÿz1LinprogCommonTests.test_invalid_inputs.<locals>.f©r   r   r!   r‘   ©r!   r$   ©rm   zCreating an ndarray from ragged)r‘   r	  )r!   r$   é   ©r   r�   r   r   )rg   rh   )ri   rj   Ú_sparse_presolve)r   r   r!   )rg   rj   ©NNNNN)	r®   r¯   r6   r  r   Úfilterr   r­   r;   )r¥   rï   Úsupr   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  |	|f¡}
|| }ˆ jdv rkt	t
dˆ j› d	�d
�� t||||
ˆ jˆ jd� W d   ƒ d S 1 sdw   Y  d S i ˆ j¥}ˆ jdv ryd|d< t||||
ˆ j|d�}|js‰J ‚d S )Nc              
      r  rí   r  r  rÌ   r   r   rï     r  z5LinprogCommonTests.test_sparse_constraints.<locals>.fr   r|   é–   ra   >   r¸   r·   zMethod 'z.' does not support sparse constraint matrices.r©   rÀ   >   r¶   Tr„   r  )r6   r7   r8   rƒ   r„   rC   r�   Úcolumn_stackr¡   r®   r¯   r	   r­   r   )r¥   rï   rF   rW   rE   ri   Úx_validrP   rl   rk   rm   rj   r­   r   r   rÌ   r   Útest_sparse_constraints  s0   



ÿ"þ


ÿ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$   ro   r!   r   r   r   ©r   r  r!   r3   r   r   ©r!   ç      @ro   r   r3   r   ©ro   r^   r$   r   r   r3   ©é¹   é›   iX  r   r!   r   rÝ   )r6   r7   rd   r	   r¡   r   r   r’   )r¥   rP   rN   rO   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 d S )NÚpresolveTr   )r   r   ©rm   r¡   r­   r   r  ))r  r  )r3   r3   )r!   r!   rü   )r  r3   r!   )r   r!   r   )r   r   r   ©r   r   r   ©r   r   r   rv   ))éûÿÿÿr  )r   r^   )ç      @r$  ©ri   rj   rm   r¡   r­   é   )r   rv   r$  )r­   Úgetr	   r¡   r2   r   r’   ©r¥   Údo_presolver   r   r   r   Útest_bounds_fixed1  s6   ÿÿÿþÿ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|ƒ |r6t|jdƒ tg d¢g d¢| j| j d�}t|ƒ |rRt|jdƒ d S 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_infeasibleQ  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¡�# t t	¡� |||d	� W d   ƒ n1 sKw   Y  W d   ƒ n1 sZw   Y  t t¡�, t t	¡� |||d	� W d   ƒ n1 s{w   Y  W d   ƒ d S W d   ƒ d S 1 s“w   Y  d S t
||ˆ jˆ j d
�}t|ƒ |r°t|jdƒ t
||ˆ jˆ j d
�}t|ƒ |rÈt|jdƒ d S d S )Nr  Tr¸   r  r‘   r	  c                    s   t | |ˆ jˆ jd�}|S )Nr   r  )rP   rm   r   rÌ   r   r   Úgz  s   ÿz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gr
  ©rP   rm   r¡   r­   r   )r­   r'  r¡   r6   rb   r°   r±   ÚRuntimeWarningr   Ú
IndexErrorr	   r   r   r’   )r¥   r)  Úsimplex_without_presolverP   Úbounds_1Úbounds_2r,  r   r   rÌ   r   Útest_bounds_infeasible_2h  sB   
ÿ€ÿÿÿ"ÿÿÿÿz+LinprogCommonTests.test_bounds_infeasible_2c                 C   s&   ddg}t || j| jd�}t|ƒ d S )Nr3   r�   rã   )r	   r¡   r­   r"   )r¥   rP   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¡r.t|jdƒ d S d S )N)r3   r   r3   r   r   ©r3   r   r   r  T)	r6   rb   r	   r¡   r­   r"   r'  r   r’   ©r¥   rP   rm   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   r3   r   r3   r   r5  r   )r   r   r3   r   r�   ©r0   r/   )r6   rb   r	   r¡   r­   r2   r6  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   r3   r   r   rž   rã   iîÿÿÿrr   r£   ©	r6   r@   r	   ri   rj   rm   r¡   r­   r2   ©r¥   rP   rg   rh   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 )Nrr   r!   r   r3   r�   r   )r   r3   r3   rã   r  gUUUUUUå?gUUUUUUÕ?r£   ©r	   ri   rj   rm   r¡   r­   r2   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ã   ©r0   )r	   rg   rh   ri   rj   r¡   r­   r2   r6  r   r   r   Útest_bounds_simpleÁ  s   ÿÿz%LinprogCommonTests.test_bounds_simplec              
   C   óZ   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£   ©r6   r@   r	   rg   rh   r¡   r­   r2   ©r¥   rP   ri   rj   rm   r   r   r   r   Útest_bounded_below_only_1Í  ó   ÿ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  ra   rã   r8  ©r6   r‚   Úeyer@   rb   r	   rg   rh   r¡   r­   r2   ÚsumrC  r   r   r   Útest_bounded_below_only_2Ö  s   


ÿz,LinprogCommonTests.test_bounded_below_only_2c              
   C   rA  )Nrà   rá   )Nrê   rã   r!   r£   rB  rC  r   r   r   Útest_bounded_above_only_1ß  rE  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ã   r8  rF  rC  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ã   r8  rF  rC  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 )Nr3   r$   rt   r   r   r4   rr   rã   g·mÛ¶mÛ&Àg’$I’$Iò¿g%I’$I’@r£   )
r6   r@   Úfloat64rb   r	   ri   rj   r¡   r­   r2   )r¥   rP   rg   rh   rÙ   rÚ   rm   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 ©Nrx   r   rv   r�   r   r   )é   r   r!   ©r   r   r   rã   )r	   ri   rj   r¡   r­   r   ©r¥   rP   rg   rh   rm   r   r   r   r   Ú test_bounds_equal_but_infeasible  ó   ÿ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 rO  )r	   rg   rh   r¡   r­   r   rC  r   r   r   Ú!test_bounds_equal_but_infeasible2  rT  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$   ro   r‘   rQ  c                    rð   r   rñ   rò   rÌ   r   r   rõ   $  rö   zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>Fr  rã   )r­   r	   ri   rj   r¡   r   ©r¥   rP   rg   rh   rm   rù   r   r   rÌ   r   Útest_bounds_equal_no_presolve  s   ÿz0LinprogCommonTests.test_bounds_equal_no_presolvec              
   C   sŽ   d\}}t j d¡}| |¡}d|d< | ||¡}d|d d …df< | |¡}g d¢g}d}g d¢}	t||||||	| j| jd�}
t|
dd	� d S )
Nr	  r   r   )r   r   r   r   r!   )©ru   r^   rX  )ru   Nr~   rã   gyM�±åj#ÀrÒ   )r6   r7   r8   rC   r	   r¡   r­   r2   )r¥   rW   rE   rF   rP   ri   rj   rg   rh   rm   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\}}| |¡}d|d< | ||¡}d|d d …df< | |¡}| ||¡}d|d d …df< | |¡}d}	t||||||	| j | jd�}
t	|
ƒ | j 
dd	¡rjd
| j vrlt|
jdƒ d S d S d S )N>   r¿   ú	highs-ipmr   r#   r3   r   r~   rã   r  Tr³   )r¡   r°   Úxfailr6   r7   r8   rC   r	   r­   r"   r'  r   r’   )r¥   rF   rW   rE   rP   ri   rj   rg   rh   rm   r   r   r   r   Útest_zero_column_2:  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	   rg   rh   rm   r¡   r­   r2   ©r¥   rP   ri   rj   r   r   r   r   Útest_zero_row_1U  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 )Nr]  r^  r_  r  rã   r   rÒ   r=  )r¥   rg   rh   rP   r   r   r   r   Útest_zero_row_2]  s   ÿz"LinprogCommonTests.test_zero_row_2c              
   C   sŠ   d\}}t j d¡}| |¡}| ||¡}d|dd d …f< | |¡}t|tt||t| j| j	d�}t
|ƒ | j	 dd¡rCt|jdƒ d S d S ©Nr#   iÒ  r   rã   r  T)r6   r7   r8   rC   r	   rg   rh   rm   r¡   r­   r   r'  r   r’   )r¥   rW   rE   rF   rP   ri   rj   r   r   r   r   Útest_zero_row_3e  s   

ÿÿz"LinprogCommonTests.test_zero_row_3c              
   C   sŒ   d\}}t j d¡}| |¡}| ||¡}d|dd d …f< | |¡ }t|||ttt| j| j	d�}t
|ƒ | j	 dd¡rDt|jdƒ d S d S rd  )r6   r7   r8   rC   r	   ri   rj   rm   r¡   r­   r   r'  r   r’   )r¥   rW   rE   rF   rP   rg   rh   r   r   r   r   Útest_zero_row_4t  s   
ÿÿz"LinprogCommonTests.test_zero_row_4c              
   C   sr   g d¢}g d¢g d¢g d¢g d¢g}g d¢}t |tt||t| j| jd�}t|ƒ | j dd¡r7t|j	d	ƒ d S 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	   rg   rh   rm   r¡   r­   r   r'  r   r’   ra  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 )	Nrg  rh  ri  rj  )r   r   r   r$   rã   r$   rÒ   r`  ra  r   r   r   Útest_singleton_row_eq_2�  s   ÿz*LinprogCommonTests.test_singleton_row_eq_2c              
   C   sz   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
¡r;t|jdƒ d S d S )Nrg  rh  ri  ©r3   r   r   r   rj  )r   r   r�   r$   ©r~   r   r   r   rã   r  Tr   ©	r	   ri   rj   r¡   r­   r   r'  r   r’   rR  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 )Nrg  rh  ri  rm  rj  )r   r   ç      à¿r$   rn  rã   ra   rÒ   )r	   ri   rj   r¡   r­   r2   rR  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 )Nr3   r   r   )r   r   r#  rã   )r	   ri   rj   rm   r¡   r­   r   r;  r   r   r   Útest_infeasible­  s   þÿz"LinprogCommonTests.test_infeasiblec              
   C   s\   dg}dgg}d}d}t |||tt|| j| jd�}t|ƒ | j dd¡r,t|jdƒ d S d S )	Nr   r   r$   )r  rr   rã   r  Tr   ro  rR  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   r3   r�   rã   )	r6   r@   r	   ri   rj   rm   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r*t|jd	ƒ d S t|ƒ d S )
Nr   ©Nr   c                    rð   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¥   rP   rm   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¡sOt
|jd	 t jƒ t
|jd
d… dƒ d
S d
S )ú|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        )r   r   r   r   r3   r3   ©r   r   r   r   r   r   ©r   r   r   r   r   r   )r   r   r   r   r   r3   ©r   r�   r   )r~   r~   r~   r5  r5  r   rã   r³   r3   Né$   ú$The problem is (trivially) unbounded©r6   r@   r	   ri   rj   r¡   r­   r"   ÚlowerrÃ   r   r.   rb   r+   rR  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¡sPt
|jd	 t j ƒ t
|jd
d… dƒ d
S d
S )rx  )r   r   r   r   r3   r   ry  rz  )r   r   r   r   r   r   r{  )r~   r~   r~   r5  r5  )Nr   rã   r³   r3   Nr|  r}  r~  rR  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)r|   r^   r   r3   r!  )r_   r   r   )éÈ   r_   r   )r   r|   é'  rã   )r   r   rƒ  gñhãˆµøÔ>çH¯¼šò×z>)r0   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rJ| j 	d¡sJt
||d	 ƒ d S t|g d¢d� d S )N)ru   é9   rs   g      8@)ra   g      ÀrÇ   rs   )ra   g      ø¿rq  r   rh  )r   r   r   r|   c                 S   s   i | ]\}}||“qS r   r   )ró   rô   Úvalr   r   r   rõ     s    z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>r   rã   r¸   Úbland)r   r   r   r   r?  )r6   r@   r­   Úitemsr	   ri   rj   rm   r¡   r'  r   r2   )r¥   rP   rg   rh   r   rù   r   r   r   r   Útest_cyclic_bland  s   
þÿz$LinprogCommonTests.test_cyclic_blandc           	      C   s¾   d\}}t j d¡}| |¡}| ||¡}| |¡}d|dd d …f  |dd d …f< |d  d9  < tƒ �}| td¡ t|tt	||t
| j| jd�}W d   ƒ n1 sTw   Y  t|ƒ d S )N)r^   r^   r   r   r�   r3   úA_eq does not appear...rã   )r6   r7   r8   rC   r   r  r
   r	   rg   rh   rm   r¡   r­   r   )	r¥   rW   rE   rF   rP   ri   rj   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£   )r{   r	   rm   r¡   r­   r2   ©	r¥   rP   rg   rh   ri   rj   ry   rz   r   r   r   r   Útest_nontrivial_problem@  s
   ÿz*LinprogCommonTests.test_nontrivial_problemc                 C   s„   t ddƒ\}}}tƒ �'}| td¡ | td¡ | t¡ t|||ttt	| j
| jd�}W d   ƒ n1 s5w   Y  t|dd� d S )Nr_   ú$Solving system with option 'sym_pos'úinvalid value encounteredrã   rÑ   rÒ   )r]   r   r  r
   r.  r   r	   ri   rj   rm   r¡   r­   r2   )r¥   rg   rh   rP   r  r   r   r   r   Útest_lpgen_problemH  s   
ÿüz%LinprogCommonTests.test_lpgen_problemc                 C   s2  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 ƒ �}| t¡ t|tt||t| j| jd�}W d   ƒ n1 sŠw   Y  t	|dddd	� d S )
N)r   r$   rs   é   r$   r!   ro   rv   r   r&  é   é   r5  r   )r   é   iðÿÿÿé!   r   r   iÜÿÿÿrã   ió  ç�íµ ÷Æ°>r„  )r/   r*   r)   )
r   r  r   r	   rg   rh   rm   r¡   r­   r2   )r¥   rP   rE   Úpri   rj   r  r   r   r   r   Útest_network_flowU  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 ƒ �4}trB| t¡ | td	¡ | td
¡ | td¡ | t¡ t|tt	|||| j
| jd�}W d   ƒ n1 sqw   Y  t|dd� d S )N)r   r   r   r!   r   r   r$   r   r!   r  r5  )rx   r   r   r$   úscipy.linalg.solve
Ill...r‹  úSolving system with option...rã   rP  rÒ   )r   Úhas_umfpackr  r   r.  r
   r   r	   rg   rh   r¡   r­   r2   )	r¥   rP   rm   rE   r˜  ri   rj   r  r   r   r   r   Ú"test_network_flow_limited_capacityj  s4   ûü

ÿø
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�   rt   rx   )r!   r   r   )r   r  r!   r^   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*Ù>r„  )r/   r0   r*   r)   r`  ra  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 ƒ �}| td¡ t|tt||t| j| jd	�}W d   ƒ n1 s;w   Y  t	|d
g d¢d� d S )N)rÿ   g333333@gš™™™™™%@r   g333333Àgš™™™™™%À)r3   r3   r3   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )rq  çš™™™™™Ù?ç333333Ó?r¡  r¡  r‹  rã   gR¸…ëQü¿)r¡  gš™™™™™É?ç        r¢  r½   r¡  r£   )
r   r  r
   r	   rg   rh   rm   r¡   r­   r2   )r¥   rP   ri   rj   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 )Nr_   r   r   r   rã   r£   )r6   r‚   Úpir9   rA   ÚcosÚsinr	   rg   rh   rm   r¡   r­   r2   r;   )r¥   rW   rP   Útmpri   rj   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 )Nr`   r   r   r¢  r   rã   )r6   r‚   r¤  r9   r¥  r¦  rA   r	   rg   rh   rm   r¡   r­   r"   )	r¥   rW   rP   r§  Úrow0Úrow1ri   rj   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 )	Nr`   r   r   c                    rð   r   rñ   rò   rÌ   r   r   rõ   Ý  rö   zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>Fr  rã   )r6   r‚   r¤  r9   rA   r¥  r¦  r­   r	   rg   rh   rm   r¡   r   )r¥   rW   rP   r§  ri   rj   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   r3   r   r3   r   )r   ré   r3   r   r3   r   r   rã   g�íµ ÷ÆÀ>)r/   r0   r*   )r6   r@   r	   rm   r¡   r­   r2   Ú
zeros_like)r¥   rP   rg   rh   ri   rj   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r4t|jdkƒ t	||j
 |jƒ t	|||j
  |jdd� t	|||j
  |jdd� dD ] }|| ¡ v ryt|| d tjƒsmJ ‚t|| d	 tjƒsyJ ‚qYd S )
Nr   ©rg   rh   ri   rj   rm   r¡   r­   r³   z%Optimization terminated successfully.g•dyáý¥=©r*   )ÚeqlinÚineqlinr  ÚupperÚ	marginalsÚresidual)rn   r	   r¡   r­   r   r   r’   r   r+   r   r.   r-   r”   r“   Úkeysr–   r6   Úndarray)	r¥   rP   rg   rh   ri   rj   rm   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ƒ �'}| td#¡ | td$¡ | t¡ t|||tt	|| j
| jd%�}	W d   ƒ n	1 �s$w   Y  t|	d&d'� d S )(N)r   ©r   r|   rº  rº  rº  rº  rº  ©r   é„  r»  r»  r»  r»  r»  r   r   r   r   r   r   gÇqÇq¼?ç     ˆÃÀgÍÌÌÌÌÌÀ)r   gìQ¸…ëÀr   r   rt   r   r   r   r3   r3   r   r3   r3   r   r   r   r   r   r   r   r   g333333Àrt   r3   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   g×£p=
×ÿ?r   gffffffþ?gÍÌÌÌÌÌ @)r¢  r   r   r|   r|   r|   r|   r|   r|   r¼  r¼  r¼  r¼  r¼  r¼  r   r   r   r   r   r   r   r   r   r   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¯^¥¨ZÀrÒ   )r6   r@   r   r  r
   r.  r   r	   ri   rj   r¡   r­   r2   )
r¥   rm   rï   r,  Úhrg   rh   rP   r  r   r   r   r   Útest_bug_5400  s\   ((((((((åÿ
ÿû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 )Nr^  )rà   r¢  r¢  )ç     @�Àr¢  rÀ  g      @r½  )r¢  g    €„.Ag     Ò.Ag    ÐcAr~   rã   gfffffæ-@)r  gÍÌÌÌÌÌ@r  r£   ©r6   r@   r	   r¡   r­   r2   )r¥   rP   ri   rj   rg   rh   rm   r   r   r   r   Útest_bug_6139C  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ƒ �4}trG| t¡ | td¡ | td¡ | td¡ | t	¡ t
||||||| j| jd�}W d   ƒ n1 svw   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=
ï¿çÃõ(\�ÂÕ?r   g…ëQ¸Õ¿g®Gáz®ç¿ç®GázÞ?ç
×£p=
·?g333333÷¿ç\�Âõ(\ç¿)
ç®Gáz®×?g{®Gáz”?gáz®Gá@g…ëQ¸…ë?rÄ  ra   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'r�  r�  rã   g‰ãVó¿)
rË  rÆ  rÇ  r   rÄ  ra   rÈ  rÉ  rÌ  rÊ  r£   r—  r   r   )r6   r@   rc   r   rœ  r  r   r
   r.  r   r	   r¡   r­   r2   r   r.   )r¥   ri   rj   rg   rh   rm   rP   r  r   r/   r0   r*   r   r   r   Útest_bug_6690Y  sH   ûþý
ÿ
ÿø z LinprogCommonTests.test_bug_6690c                 C   s¶   t dƒ\}}}}}tƒ �'}| td¡ | td¡ | t¡ t|tt||t	| j
| jd�}W d   ƒ n1 s6w   Y  d}t||d� t| |j¡|ƒ tt |jj¡d |jƒ d S )Nr!   r‹  r�  rã   ç-£ÒU°û?rÒ   r}   )rQ   r   r  r
   r.  r   r	   rg   rh   rm   r¡   r­   r2   r   Údotr.   r   r6   r;   rS   )r¥   ri   rj   rP   Ú_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)	r3   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@)	r¢  ré   ç       €rÓ  rÓ  rÓ  rÓ  rÓ  rÓ  )	r¢  rÓ  ré   rÓ  rÓ  rÓ  rÓ  rÓ  rÓ  )	r¢  rÓ  rÓ  ré   rÓ  rÓ  rÓ  rÓ  rÓ  )	r¢  rÓ  rÓ  rÓ  ré   rÓ  rÓ  rÓ  rÓ  )	r¢  rÓ  rÓ  rÓ  rÓ  ré   rÓ  rÓ  rÓ  )	r¢  rÓ  rÓ  rÓ  rÓ  rÓ  ré   rÓ  rÓ  )	r¢  rÓ  rÓ  rÓ  rÓ  rÓ  rÓ  ré   rÓ  )	r¢  rÓ  rÓ  rÓ  rÓ  rÓ  rÓ  rÓ  ré   )	r¢  rà   r¢  r¢  r¢  r¢  r¢  r¢  r¢  )	r¢  r¢  rà   r¢  r¢  r¢  r¢  r¢  r¢  )	r¢  r¢  r¢  rà   r¢  r¢  r¢  r¢  r¢  )	r¢  r¢  r¢  r¢  rà   r¢  r¢  r¢  r¢  )	r¢  r¢  r¢  r¢  r¢  rà   r¢  r¢  r¢  )	r¢  r¢  r¢  r¢  r¢  r¢  rà   r¢  r¢  )	r¢  r¢  r¢  r¢  r¢  r¢  r¢  rà   r¢  )	r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  rà   )r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  rà   rà   rà   rà   rà   rà   rà   rà   )	r¢  rà   rà   rà   rà   rà   rà   rà   rà   rà   r~   rs   rã   ghèŸàb$[@r—  ©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ƒ �!}| td¡ | t¡ t	|||t
t|| j| jd	�}W d   ƒ n1 sQw   Y  | j d
d¡dk rj| jdkrjt|ƒ d S 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»   r�  rã   Útolg•Ö&è.>ç»½×Ùß|Û=r¸   gê¦Ëë‡ Àr—  rÔ  )r6   r@   r;   rD   r‚   r   r  r.  r   r	   ri   rj   r¡   r­   r'  r%   r2   )r¥   rg   rh   rP   rm   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ƒ �#}trN| t¡ | td¡ t|||||t	| j
| jd�}W d   ƒ n1 slw   Y  t|dd� d S )N)r   r   r   r   r   r   r   rv   r�   )r   r   r   r   r   r   r   )r¡  gÍÌÌÌÌÌô?gÍÌÌÌÌÌì?r   r   r   r3   )r¡  r   r   r   r   r   gUUUUUUå¿)r   rÃ  r   r   r   r   ç±¿)r   r   r¡  r   r   r   rÝ  r|   r   r‹  rã   gŽ?ªªªªE@rÒ   )r6   r@   Úidentityr   rœ  r  r   r
   r	   rm   r¡   r­   r2   ©r¥   rP   rg   rh   ri   rj   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)rv   r   rx   ç      ø?rá  )r$   ç      @rá  rà   ç      À)r   rÇ   r�   r  ra   )r!   rq  r$   g      )Àrq   )r3   g      @r   rã  r�   )râ  r   g      Àr3   g      #@)r   r   r   r   r   )rg   rh   r­   r¡   )r   r   r•  gUUUUUU@gUUUUUU#@r?  )r6   r@   r	   r­   r¡   r2   r;  r   r   r   Útest_bug_8561ï  s   ûÿz LinprogCommonTests.test_bug_8561c           
      C   sH  g d¢}g d¢g d¢g d¢g d¢g}g d¢}g d¢}d}t ƒ �(}tr'| t¡ | td	¡ | t¡ t|||tt|| j	| j
d
�}W d   ƒ n1 sJw   Y  | g d¢¡ | d¡ d|d< t ƒ �(}trj| t¡ | td	¡ | t¡ t|||tt|| j	| j
d
�}W d   ƒ n1 s�w   Y  d}	t|||	d� t|||	d� d S )N)ru   r^   rr   r!   )ro   rw   rx   rr   )rw   ro   r$   rp   )rx   r$   ro   rx   )r!   rt   rt   ru   )rs   é÷ÿÿÿrå  rx   )r   r   r   r   g      B@r�  rã   )r   r   r3   r   r   r~   r   r}   )r/   r)   )r   rœ  r  r   r.  r   r	   ri   rj   r¡   r­   r>   r2   )
r¥   rP   rg   rh   rm   r/   r  Ú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   rq   rp   r   r~   rã   gÛ¶mÛ¶më?gI’$I’$@r8  )r	   rg   rh   r¡   r­   r2   rC  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 ƒ �!}| t¡ | td¡ t|||||t| j| jd	�}W d   ƒ n1 s@w   Y  t|ƒ d S )
Nr$   r   r  r   rw   rs   ©r!   r   r^   r›  rã   )	r   r  r.  r
   r	   rm   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   r3   )r   r   r   r   r   )r   r   r   r   r   r   r�   )r~   r~   r~   r5  r5  rã   rÒ   N)r6   r@   r	   ri   rj   r¡   r­   r2   r   r.   r-   rR  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�   r~   rã   r   r8  N)	r6   r;   r@   r	   ri   rj   r¡   r­   r2   rR  r   r   r   Útest_bug_8973_2P  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�   r~   r3   r$   rt   r   rr   r×   rÏ   Trã   r^   rØ   r8  N)
r6   r;   r@   Úupdater­   r	   ri   rj   r¡   r2   rV  r   r   r   Útest_bug_10124`  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ƒ �}| td¡ t|tt	||t
| j| jd�}W d  ƒ n1 sMw   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   )éÝ   éÒ   r^   é�   éÆ   éf   r   r   r$   N©Úaxisr‹  rã   )é�   é\   rü   ró  r   r^   rø  r8  )r6   r@   Úconcatenater;   r   r  r
   r	   rg   rh   rm   r¡   r­   r2   )r¥   ri   rj   rP   r  r   r   r   r   Útest_bug_10349s  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¡s4ddi}| | j¡ tƒ �@}| td¡ trK| t¡ | t	d¡ | t	d¡ | t	d¡ | t	d¡ | t
d¡ t|tt||t| j |d�}W d  ƒ n1 s€w   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à   r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  )r¢  r¢  rà   rà   r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  )r¢  r¢  r¢  r¢  rà   rà   r¢  r¢  r¢  r¢  r¢  r¢  r¢  )rà   r¢  rà   r¢  rà   r¢  ré   r¢  r¢  r¢  r¢  r¢  r¢  )rà   r¢  rà   r¢  rà   r¢  r¢  rà   r¢  r¢  r¢  r¢  r¢  )rà   r¢  r¢  r¢  r¢  r¢  r¢  r¢  rà   r¢  r¢  r¢  r¢  )rà   r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  rà   r¢  r¢  r¢  )rà   r¢  rà   r¢  rà   r¢  r¢  r¢  r¢  r¢  rà   r¢  r¢  )r¢  r¢  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     À²Ag      ¹Ag     @¿Ag      ÎAç   þÿÿÏArÿ  rÿ  rÿ  rÿ  rÿ  r³   Ú	autoscaleTr›  rš  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...úIll-conditioned matrix...rã   Nlýÿÿÿàÿ )r¡   rÃ   rî  r­   r   r  r
   rœ  r   r.  r   r	   rg   rh   rm   r   r-   )r¥   rP   ri   rj   rù   r  r   r   r   r   Útest_bug_10466†  s>   ÷
ÿ÷z!LinprogCommonTests.test_bug_10466N)WÚ__name__Ú
__module__Ú__qualname__Ú__doc__rÍ   rÕ   rÛ   rß   rå   rè   rì   r°   ÚmarkÚthread_unsaferú   r  r  r  r  r*  r+  r3  r4  r7  r9  r<  r>  r@  rD  rI  rJ  rK  rL  rN  rS  rU  rW  rY  r\  rb  rc  re  rf  rk  rl  rp  rr  rs  rt  ru  rw  r€  r�  r…  rŠ  rŒ  rŽ  r‘  r™  r�  rž  rŸ  r£  r¨  r«  r¬  r¯  r¹  r¿  rÂ  rÍ  rÑ  rÕ  rÜ  rà  rä  rè  ré  rë  rì  rí  rï  rú  ÚskipifÚsysÚplatformr  r   r   r   r   rÊ   n  sª    


! 
)
								
7,)$ÿrÊ   zignore::DeprecationWarningc                   @   ó   e Zd ZdZdS )ÚLinprogSimplexTestsr¸   N©r  r  r  r¡   r   r   r   r   r  ·  s    r  c                   @   ó   e Zd ZdZdd„ ZdS )ÚLinprogIPTestsr¶   c                 C   ó   t  d¡ d S )Nz*Test is failing, but solver is deprecated.©r°   ÚskiprÌ   r   r   r   r  À  ó   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   r  ©Nz Intermittent failure acceptable.r  rÌ   r   r   r   r¿  Ø  r  zLinprogRSTests.test_bug_5400c                 C   r  r  r  rÌ   r   r   r   rè  Û  r  zLinprogRSTests.test_bug_8662c                 C   r  r  r  rÌ   r   r   r   r™  Þ  r  z LinprogRSTests.test_network_flowN)r  r  r  r¡   r¿  rè  r™  r   r   r   r   r  Ä  s
    r  c                   @   s¤   e Zd Zdd„ Zejj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	ej 
d¡dd„ ƒZdd„ Zdd„ Zejjdd�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>.cbrt   r�   r   r   r   rž   rŸ   r¨   r¢   rr   r£   )r6   r@   r®   ÚNotImplementedErrorr	   r¡   r2   r¤   r   r   r   rÍ   ã  s   ÿzLinprogHiGHSTests.test_callbackr­   r   r3   rÏ   r  r¼   Údual_feasibility_toleranceÚprimal_feasibility_toleranceÚipm_optimality_toleranceÚ!simplex_dual_edge_weight_strategyÚ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   rZ  )rQ   r	   r¡   r­   r   Úcrossover_nit)r¥   ri   rj   rP   rÐ  rm   r   r   r   r   Útest_crossover   s   
ÿz LinprogHiGHSTests.test_crossoverr^   c           
   
      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�� t|ˆd|jd�}d|t ˆ¡ < W d   ƒ n1 s‚w   Y  t|jj	|ƒ ‡ ‡‡‡‡‡‡fdd„}tjdd�� t|ˆd|jd�}	d|	t ˆ¡ < W d   ƒ n1 s¼w   Y  t|jj	|	ƒ d S )Nr   ©rd   r°  c              	      s   t ˆˆ| ˆ ˆˆˆjd�jS ©Nr´   ©r	   r¡   r-   ©r.   )ri   rg   rj   rm   rP   r¥   r   r   Úf_bub  ó
   ÿÿz/LinprogHiGHSTests.test_marginals.<locals>.f_bubz3-point)r¡   Úf0c              	      s   t ˆˆˆˆ | ˆˆjd�jS r"  r#  r$  )ri   rg   rh   rm   rP   r¥   r   r   Úf_beq  r&  z/LinprogHiGHSTests.test_marginals.<locals>.f_beqc              	      s*   t  | ˆg¡j}tˆˆˆˆ ˆ|ˆjd�jS r"  ©r6   r@   rc   r	   r¡   r-   ©r.   rm   )ri   rg   rj   rh   rP   r¥   rl   r   r   Úf_lb"  ó   ÿÿz.LinprogHiGHSTests.test_marginals.<locals>.f_lbÚignore)Úinvalidc              	      s*   t  ˆ| g¡j}tˆˆˆˆ ˆ|ˆjd�jS r"  r)  r*  )ri   rg   rj   rh   rP   rk   r¥   r   r   Úf_ub/  r,  z.LinprogHiGHSTests.test_marginals.<locals>.f_ub)rn   r	   r¡   r­   rc   r   r-   r   r³  rµ  r²  r6   ÚerrstateÚisfiniter  r´  )
r¥   r   r%  Údfdbubr(  Údfdbeqr+  Údfdlbr/  Údfdubr   )	ri   rg   rj   rh   rm   rP   rk   r¥   rl   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!  r°  r   çê-�™—q=r±  )rn   r	   r¡   r­   rc   r³  rµ  r²  r´  r  r   )	r¥   rP   rg   rh   ri   rj   rm   r   Ú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¡s*J ‚d S )Nr÷   r!  r°  r   )	rn   r	   r¡   r­   r6   Úallcloser³  rµ  r.   rë   r   r   r   Útest_complementary_slacknessH  s
   
ÿ&z.LinprogHiGHSTests.test_complementary_slacknessz&Upstream / Wrapper issue, see gh-20589rü  c                 C   sö   g d¢}g d¢}g d¢}g d¢}g d¢}g d¢}t j|t jd�}t j|t jd�}t j|t jd�}	tjj|||	ffdd	�}
t j|t jd�}t j|t jd�}tjj|d
d
|
||d�}|j	dks_J ‚|j
}t j |
| | ¡}t j |jj¡}t||ƒ d
S )zH
        Test that `linprog` now solves a poorly-scaled problem
        )!)ç     ˆÃ@g    j/aA)r¢  N©r<  N)r¢  gÈÄS8(U@r=  r=  r=  r=  r=  r=  r=  r=  r=  r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   r~   )Sré   rà   ré   rà   ré   rà   ré   rà   ré   rà   ré   rà   ré   rà   ré   rà   ré   rà   ré   rà   rà   rà   ré   çü©ñÒMbP?çü©ñÒ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@  rà   ré   r>  r?  r@  r@  rà   ré   r>  r?  r@  r@  rà   ré   r>  r?  r@  r@  rà   ré   )Sr   r   r   r   r   r   r!   r!   r$   r$   r  r  rr   rr   rv   rv   ro   ro   rs   rs   r^   r’  r’  rü   rü   rü   rü   é   rA  rP  rP  rP  rP  r&  r&  r“  r“  r“  r“  é   rB  r”  r”  r”  r”  r•  r•  r_   r_   r_   r_   é   rC  é   rD  rD  rD  é   rE  é   rF  rF  rF  é   rG  é   rH  rH  rH  é   rI  é   rJ  rJ  rJ  é   rK  é   rL  rL  rL  é   rM  )Sr&  rP  rB  r“  r•  r”  rC  r_   rE  rD  rG  rF  rI  rH  rK  rJ  rM  rL  rA  r   r   é    r!   rP  rA  r$   r   r$   r   rN  rM  r   rü   r   rü   r“  r&  r  r$   r  r$   r”  rB  rr   r  rr   r  r_   r•  rv   rr   rv   rr   rD  rC  ro   rv   ro   rv   rF  rE  rs   ro   rs   ro   rH  rG  r^   rs   r^   rs   rJ  rI  r’  r^   r’  r^   rL  rK  rü   r’  rü   r’  ) r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  g    ˆ*aAr¢  gºel›aûz?g—?‰2¨³ÀgZßÁPd%q?gúò‰4ïî¾ÀgéÌšãy?gµŽC1 |´ÀgÖ›üÓËx?gÀK†ÇcµÀgEŽ3-´w?g-.f—?`¶ÀgsFË]Fœv?g@ÎÊ¥u·Àg¢þbŽ„u?gNø³¦¸ÀgÐ¶ú¾¸lt?g=Ð‚Ã÷¹Àgþn’ïñTs?g”ÂQ3”o»Àg,'* +=r?g)[Šn½À)!r¢  r¢  r¢  g¯l'V3ˆ¿r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r¢  r4   )rN  r–  )rD   N)rg   rh   ri   rj   rm   r   )r6   ÚasarrayrM  Úint32rƒ   r„   Ú	csr_arrayÚoptimizer	   r   r.   ÚlinalgÚnormr²  r¶  r   )r¥   Ú
boundariesÚ
eq_entriesÚ
eq_indizesÚeq_varsÚ	eq_valuesÚcoefficientsÚnp_eq_entriesÚnp_eq_indizesÚ
np_eq_varsÚa_eqrj   rP   Úresultr.   Ún_r_xÚn_rr   r   r   Útest_bug_20336S  s,   
ÿÿz LinprogHiGHSTests.test_bug_20336N)r  r  r  rÍ   r°   r  r  Úparametrizer  r   Ú	fail_slowr6  r9  r;  r[  rb  r   r   r   r   r  â  s,    ùÿ


1r  c                       s<   e Zd Zdd„ Zdd„ Zdd„ Zejj‡ fdd„ƒZ	‡  Z
S )	ÚTestLinprogSimplexDefaultc                 C   s
   i | _ d S rË   rñ   rÌ   r   r   r   Úsetup_methodŸ  s   
z&TestLinprogSimplexDefault.setup_methodc                 C   r  ©NzSimplex fails on this problem.r  rÌ   r   r   r   r¿  ¢  r  z'TestLinprogSimplexDefault.test_bug_5400c                 C   r  rg  r  rÌ   r   r   r   Útest_bug_7237_low_tol¥  ó   z/TestLinprogSimplexDefault.test_bug_7237_low_tolc                    óJ   | j  ddi¡ t t¡� tƒ  ¡  W d   ƒ d S 1 sw   Y  d S ©NrÚ  r7  ©r­   rî  r°   r±   r
   ÚsuperrÜ  rÌ   ©Ú	__class__r   r   Útest_bug_8174_low_tolª  ó   "ÿz/TestLinprogSimplexDefault.test_bug_8174_low_tol)r  r  r  rf  r¿  rh  r°   r  r  rp  Ú__classcell__r   r   rn  r   re  �  s    re  c                       s4   e Zd Zdd„ Zdd„ Zejj‡ fdd„ƒZ‡  Z	S )ÚTestLinprogSimplexBlandc                 C   ó   ddi| _ d S )Nrˆ  Trñ   rÌ   r   r   r   rf  µ  r  z$TestLinprogSimplexBland.setup_methodc                 C   r  rg  r  rÌ   r   r   r   r¿  ¸  r  z%TestLinprogSimplexBland.test_bug_5400c              	      s„   | j  ddi¡ t t¡�+ t t¡� tƒ  ¡  W d   ƒ n1 s#w   Y  W d   ƒ d S W d   ƒ d S 1 s;w   Y  d S rk  )	r­   rî  r°   r   r,   r±   r
   rm  rÜ  rÌ   rn  r   r   rp  »  s   ÿÿ"ÿz-TestLinprogSimplexBland.test_bug_8174_low_tol)
r  r  r  rf  r¿  r°   r  r  rp  rr  r   r   rn  r   rs  ³  s
    rs  c                       sŒ   e Zd Zdd„ Ze d¡jdk Zej	 
d¡Zejjeoedd�‡ fdd	„ƒZ‡ fd
d„Zdd„ Zejj‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )ÚTestLinprogSimplexNoPresolvec                 C   rt  )Nr  Frñ   rÌ   r   r   r   rf  Ç  r  z)TestLinprogSimplexNoPresolve.setup_methodr   ro   Úlinuxz"Fails with warning on 32-bit linux)Ú	conditionrý  c                    ó   t ƒ  ¡  d S rË   )rm  r¿  rÌ   rn  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w   Y  d S )NrÚ  r7  zlinprog status 4r©   )r­   rî  r°   r   r,   rm  rÂ  rÌ   rn  r   r   Útest_bug_6139_low_tolÓ  s   $ÿz2TestLinprogSimplexNoPresolve.test_bug_6139_low_tolc                 C   r  rg  r  rÌ   r   r   r   rh  Ü  r  z2TestLinprogSimplexNoPresolve.test_bug_7237_low_tolc                    rj  rk  rl  rÌ   rn  r   r   rp  ß  rq  z2TestLinprogSimplexNoPresolve.test_bug_8174_low_tolc                 C   r  ©Nz#Tests behavior specific to presolver  rÌ   r   r   r   r€  ç  r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1c                 C   r  rz  r  rÌ   r   r   r   r�  ê  r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2)r  r  r  rf  r6   ÚintpÚitemsizeÚ	is_32_bitr
  r  rÃ   Úis_linuxr°   r  r[  r¿  ry  rh  r  rp  r€  r�  rr  r   r   rn  r   ru  Å  s    þ	ru  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 )ÚTestLinprogIPDenser„   Frû  z:Fails on some macOS builds for reason not relevant to testrü  c                    rx  rË   ©rm  rÂ  rÌ   rn  r   r   rÂ  ÷  s   z TestLinprogIPDense.test_bug_6139)r  r  r  r­   r°   r  r	  r
  r  rÂ  rr  r   r   rn  r   r  ó  s    þr  c                   @   s   e Zd ZdddœZdS )ÚTestLinprogIPSparseCholmodT©r„   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   r  )Nz2Failing due to numerical issues on some platforms.r  rÌ   r   r   r   r�    r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacityN)r  r  r  r­   r�  r   r   r   r   r„    s    
r„  c                       st   e Zd ZddddœZejjejdkdd�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©r„   r   Úsym_posrû  ú/Fails on macOS x86 Accelerate builds (gh-20510)rü  úrThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                    rx  rË   r€  rÌ   rn  r   r   rÂ    ó   z!TestLinprogIPSparse.test_bug_6139úFails with ATLAS, see gh-7877c                    rx  rË   ©rm  rÍ  rÌ   rn  r   r   rÍ    ri  z!TestLinprogIPSparse.test_bug_6690c           	         s¨   t dƒ\}}}}}d}tƒ �6}tr| t¡ | td¡ | td¡ ‡ fdd„ˆ jD ƒ}d|d< t|t	t
|||ˆ j|d	�}W d   ƒ n1 sGw   Y  t|d
d� d S )Nr!   r»   zMatrix is exactly singularr›  c                    rð   r   rñ   rò   rÌ   r   r   rõ   (  rö   zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>Fr  rã   rÎ  rÒ   )rQ   r   rœ  r  r   r   r
   r­   r	   rg   rh   r¡   r2   )	r¥   ri   rj   rP   rÐ  rm   r  rù   r   r   rÌ   r   Ú$test_magic_square_sparse_no_presolve  s   
ÿ÷z8TestLinprogIPSparse.test_magic_square_sparse_no_presolvec           
         s¦   t dƒ\}}}}}tƒ �=}| td¡ | td¡ ‡ fdd„ˆ jD ƒ}d}|D ]}||d< t|tt||tˆ j	|d�}	t
|	d	d
� q'W d   ƒ d S 1 sLw   Y  d S )Nr!   r‹  zInvalid permc_spec optionc                    rð   r   rñ   rò   rÌ   r   r   rõ   5  rö   zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>)ÚNATURALÚMMD_ATAÚMMD_AT_PLUS_AÚCOLAMDr§   Ú
permc_specrã   rÎ  rÒ   )rQ   r   r  r
   r­   r	   rg   rh   rm   r¡   r2   )
r¥   ri   rj   rP   rÐ  r  rù   Úpermc_specsr’  r   r   rÌ   r   Útest_sparse_solve_options/  s   ÿü"øz-TestLinprogIPSparse.test_sparse_solve_options)r  r  r  r­   r°   r  r	  r
  r  Úxfail_on_32bitrÂ  r[  rÍ  r�  r”  rr  r   r   rn  r   r…    s    þ
r…  c                       sj   e Zd ZdddœZejjejdkdd�ej 	d¡‡ fdd„ƒƒZ
d	d
„ Zejjdd�‡ fdd„ƒZ‡  ZS )ÚTestLinprogIPSparsePresolveT)r„   r  rû  rˆ  rü  r‰  c                    rx  rË   r€  rÌ   rn  r   r   rÂ  D  rŠ  z)TestLinprogIPSparsePresolve.test_bug_6139c                 C   r  )Nz6_sparse_presolve=True incompatible with presolve=Falser  rÌ   r   r   r   r¬  N  r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityr‹  c                    rx  rË   rŒ  rÌ   rn  r   r   rÍ  Q  ri  z)TestLinprogIPSparsePresolve.test_bug_6690)r  r  r  r­   r°   r  r	  r
  r  r•  rÂ  r¬  r[  rÍ  rr  r   r   rn  r   r–  A  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†  r_   rÐ   r¨   z(linprog default solver unexpected resultgVçž¯â<gVçž¯Ò<r'   )Úhas_cholmodrœ  r]   r	   r¡   r   r-   )r¥   r­   rN   rO   rP   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 )Nr3   rv  FT)r  r   r-  rÒ   )r	   r¡   r2   r6  r   r   r   Ú)test_unbounded_below_no_presolve_originall  s   þz?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originalc                 C   rÎ   )Nr_   r   TrÐ   rÑ   rÒ   rÓ   rÔ   r   r   r   Útest_choleskyu  rÖ   z#TestLinprogIPSpecific.test_choleskyc              	   C   s„   t ddƒ\}}}tƒ �'}| td¡ | td¡ | td¡ t|||| jdddœd�}W d   ƒ n1 s5w   Y  t|dd	� d S )
Nr_   rš  r›  r  T)ÚiprÏ   rÐ   rÑ   rÒ   )	r]   r   r  r.  r
   r   r	   r¡   r2   )r¥   rN   rO   rP   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 ƒ �"}| t¡ | td¡ t|||||t| jd	d
id�}W d   ƒ n1 sAw   Y  t|j dƒ d S )Nr$   r   r  r   rw   rs   rê  r›  r  Frã   r   )	r   r  r.  r
   r	   rm   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—  W  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   r  r  r  rÌ   r   r   r   rŠ  Ÿ  r  z%TestLinprogRSCommon.test_cyclic_blandc           	      C   óP   t ƒ \}}}}}}}t|||||t| j| j|d�	}t|||d� t|jdƒ d S ©N©r¡   r­   Úx0r£   r   ©r{   r	   rm   r¡   r­   r2   r   r’   r�  r   r   r   Ú"test_nontrivial_problem_with_guess¢  ó   
ÿz6TestLinprogRSCommon.test_nontrivial_problem_with_guessc           
      C   óX   t ƒ \}}}}}}}g d¢}t||||||| j| j|d�	}	t|	||d� t|	jdƒ d S )N)r~   r~   r   r~   r¡  r£   r   ©r{   r	   r¡   r­   r2   r   r’   ©
r¥   rP   rg   rh   ri   rj   ry   rz   rm   r   r   r   r   Ú0test_nontrivial_problem_with_unbounded_variables©  ó   
ÿzDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesc           
      C   r¦  )N)rv  ©r   Nr   ©r   g333333ã?r¡  r£   r   r§  r¨  r   r   r   Ú.test_nontrivial_problem_with_bounded_variables±  rª  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   r   g«@Q†$@)r~   r«  r   r¬  r¡  r£   r   )	r{   r6   r@   r	   r¡   r­   r2   r   r’   r¨  r   r   r   Ú8test_nontrivial_problem_with_negative_unbounded_variable¹  s   
ÿzLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablec           
      C   óJ   t ƒ \}}}}}}}g d¢}t|||||t| j| j|d�	}	t|	jdƒ d S ©N)r   r   r!   ra   r¡  rr   ©r{   r	   rm   r¡   r­   r   r   ©
r¥   rP   rg   rh   ri   rj   ry   rz   Ú	bad_guessr   r   r   r   Ú&test_nontrivial_problem_with_bad_guessÄ  ó   
ÿz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guessc           
      C   sÞ   t dƒ\}}}}}tjj|jŽ }tƒ �:}| td¡ | td¡ | t	¡ t
|||| jd�}t
|||| j|jd�}t
|| ||| j|jd�}	W d   ƒ n1 sPw   Y  t|dd� t|jdƒ t|	ƒ t|	j|jk ƒ d S )	Nr!   r‹  r�  )ri   rj   r¡   )ri   rj   r¡   r¢  rÎ  rÒ   r   )rQ   r6   r7   rC   rD   r   r  r
   r.  r   r	   r¡   r.   r2   r   r’   r   )
r¥   rN   rO   rP   rÐ  r˜  r  r   rç  Úres3r   r   r   Ú%test_redundant_constraints_with_guessË  s   
úz9TestLinprogRSCommon.test_redundant_constraints_with_guessN)r  r  r  r­   rŠ  r¤  r©  r­  r®  r´  r·  r   r   r   r   rž  œ  s    rž  c                   @   ó   e Zd ZddiZdS )ÚTestLinprogRSBlandÚpivotrˆ  Nrƒ  r   r   r   r   r¹  Û  ó    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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.
        )rg   rh   rm   r¡   r­   r   Ng�íµ ÷Æ°¾c                 S   s"   g | ]\}}|d u rt jn|‘qS rË   ©r6   rb   ©ró   rk   rl   r   r   r   Ú
<listcomp>õ  s    ÿzCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>c                 S   s(   g | ]\}}|d u rt j n|d ‘qS )Nr„  r½  r¾  r   r   r   r¿  ÷  s    ÿ)rŽ   r	   r¡   r­   r   r   r   r.   r6   Úallr“   )r¥   rP   rg   rh   r�   r   r   r   r   Útest_lad_regressionè  s   
ÿÿÿz/TestLinprogHiGHSSimplexDual.test_lad_regressionN)r  r  r  r¡   r­   rÁ  r   r   r   r   r¼  ä  s    r¼  c                   @   s   e Zd ZdZi ZdS )ÚTestLinprogHiGHSIPMrZ  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 d¡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dd„ ƒZejjdd„ ƒZdd„ Zdd„ ZdS )ÚTestLinprogHiGHSMIPr³   r^   l        ÚLinuxFzgh-16347)rw  Ú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   ©rP   ri   rj   rm   r¡   r¾   r   rõ  r3   r7  r±  )rQ   rÄ   r	   r¡   r?   r.   r:   r6   rH  r  r   ÚdiagÚround)r¥   rE   rN   rO   rP   rH   rG   rm   r¾   r   ÚsÚ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�   rw   r^   r3   rA  r   r   rý   rt   )r6   r@   rb   rÄ   Ú	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¡sUt  	|j
ddg¡sWJ ‚d S d S )	Nr3   r   r!   r   rû   r   rý   r�   )r6   r@   rb   rÄ   r	   r¡   r  r   r-   r:  r.   r  r   r   r   Ú	test_mip3;	  s   
ÿ0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 )Nr3   r�   rx   r   r   )rP  ißÿÿÿr_   ro   r   rý   g      @rv   é;   )
r6   r@   rb   rÄ   r	   r¡   r  r   r.   r-   r  r   r   r   Ú	test_mip4L	  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seJ ‚| 	dd ¡d usoJ ‚d S )Nr^  rv   )r$   r   r   rü   )rt   r�   r3   r   r»   r"  )rP   rg   rh   ri   rj   rm   r¡   r¾   )r   rr   r   iôÿÿÿÚmip_node_countÚmip_dual_boundÚmip_gap)
r6   r@   rb   r	   r¡   r  r   r.   r-   r'  )	r¥   rg   rh   ri   rj   rP   rm   r¾   r   r   r   r   Ú	test_mip5\	  s    þzTestLinprogHiGHSMIP.test_mip5c                 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©rD  rA  rH  r–  rC  r!   rP  rH  ©é'   r“  rD  rJ  rH  rL  rE  rF  ©r”  rP  rK  rI  rL  é&   rH  rH  ©é)   rH  rJ  r|  r”  rÙ  r“  rH  ©iÀ  iâ(  i:,  i/  ©r   r^   rA  rB  rv   r  rv   r!   r   ro   r   rÆ  i>  )r6   r@   rb   r	   r¡   r  r   r-   )r¥   ri   rj   rP   rm   r¾   r   r   r   r   Ú	test_mip6t	  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 ]!}t|tt|||| j|d|id�	}	|	d }
|
|ksPJ ‚| |
¡ q4t  t  	|¡¡}t  
|dk¡sgJ ‚t  
|dk¡rpJ ‚d S )NrÕ  rÖ  rØ  rÚ  rÜ  rÝ  r   ro   r   )ra   g      Ð?g{®Gáz„?r>  Úmip_rel_gap)	rP   rg   rh   ri   rj   rm   r¡   r¾   r­   rÓ  )r6   r@   rb   r	   rg   rh   r¡   r>   ÚdiffÚfliprÀ  )r¥   ri   rj   rP   rm   r¾   Úmip_rel_gapsÚsol_mip_gapsrß  r   Úfinal_mip_gapÚ	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s8J ‚d S )	N)rà   rà   r3   r3   ra   rá  )r   r!   r   r!   r³   )rm   r¾   r¡   )r   r   rá  r   r   )r6   r@   r	   r  r   r.   r   )r¥   rP   rm   r¾   r   r   r   r   Útest_semi_continuous­	  s   "ÿz(TestLinprogHiGHSMIP.test_semi_continuousc                 C   sv   ddg}ddgg}dg}t |||ddgd�}t |||t ddg¡d�}t |||dd�}t|j|jƒ t|j|jƒ dS )z¡
        Test that when integrality is a list of all zeros, linprog gives the
        same result as when it is an array of all zeros / integrality=None
        r   r3   r   rÇ   rÈ   N)r	   r6   rO  r   r.   )r¥   rP   rg   rh   ræ  rç  r¶  r   r   r   Útest_bug_20584¼	  s   
z"TestLinprogHiGHSMIP.test_bug_20584N)r  r  r  r¡   r­   r°   r  rd  r[  r
  Úmaxsizer  ÚsystemrË  rÍ  rÎ  rÐ  rÔ  ÚxslowrÞ  ræ  rç  rè  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Ê   rÂ  rÍ  rÕ  r   r   r   r   rì  Ð	  s
    
rì  c                   @   r  )ÚTestAutoscaleIPr¶   c                 C   s   d| j d< t | ¡S )NrÛ  rÚ  )r­   rì  rÂ  rÌ   r   r   r   rÂ  Ü	  s   

zTestAutoscaleIP.test_bug_6139N)r  r  r  r¡   rÂ  r   r   r   r   rí  Ù	  s    rí  c                   @   r  )ÚTestAutoscaleSimplexr¸   Nr  r   r   r   r   rî  á	  s    rî  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestAutoscaleRSr·   c           	      C   rŸ  r   r£  r�  r   r   r   r¤  è	  r¥  z2TestAutoscaleRS.test_nontrivial_problem_with_guessc           
      C   r¯  r°  r±  r²  r   r   r   r´  ï	  rµ  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guessN)r  r  r  r¡   r¤  r´  r   r   r   r   rï  å	  s    rï  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Ê   ÚLCTrŒ  Útest_RR_infeasibilityrú  rÑ  r�  Ú	test_NFLCr£  r   r   r   r   rð  ü	  s    
rð  c                   @   r¸  )Ú	TestRRSVDr«   ÚSVDNrƒ  r   r   r   r   rô  
  r»  rô  c                   @   r¸  )ÚTestRRPivotr«   rº  Nrƒ  r   r   r   r   rö  
  r»  rö  c                   @   r¸  )ÚTestRRIDr«   ÚIDNrƒ  r   r   r   r   r÷  
  r»  r÷  )NNr&   r&   )r   )r   ro   rs   r|   )Xr  r
  r  Únumpyr6   Únumpy.testingr   r   r   r   r   r   r°   r   r®   Úscipy.optimizer	   r
   Úscipy.optimize._numdiffr   Úscipy.sparse.linalgr   Úscipy.linalgr   Úscipy._lib._utilr   Úscipy.sparserƒ   rœ  Úscikits.umfpackr   ÚImportErrorr˜  ÚsksparseÚsksparse.cholmodr   Úcholmodr   r   r"   r%   r2   rQ   r]   rn   r{   rŽ   r¦   r  r  r²   rµ   rº   rÆ   rÉ   rg   rh   ri   rj   rm   rÊ   Úfilterwarningsr  r  r  r  re  rs  ru  r  r�  r„  r…  r–  r—  rž  r¹  r¼  rÂ  rÃ  rì  rí  rî  rï  rð  rô  rö  r÷  r   r   r   r   Ú<module>   sÄ     ÿÿ

ÿB

#


	-          
S

 <.6
D?	
 
G
