o
    `^h                    @   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   _/home/air/shanriGPT/back/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%   :0yE>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< ||	  || qt| 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椀?gs?r   gkL?gqY:^@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      2rr   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|sJ t ddd} d}| jdksJ | j|sJ ddlm}
 |
dd\}}d}|dksJ ||sJ |
d d \}}d}|dksJ ||sJ 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 ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRejjSeTjUdkdddd ZVdS )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 rd 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sJ 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 |rt|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 sw   Y  d S t
|| j j d
}t| |rt|jd t
|| j j d
}t| |rt|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   irr   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   gm۶m&g$I$Ig%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   gyMj#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  gh㈵>Hz>)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 sw   Y  t	|dddd	 d S )
N)r   r$   rs      r$   r!   ro   rv   r   r&        r5  r   )r      i!   r   r   ir   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   ir   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)ggQ뱿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.gdy=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   gQ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^Zr   )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   gQ?r   r   r   r   r   r   )
r   gQ      пr   r   r   g{Gz r   r   gQ?)
r   r   r   r   r   r   r   r  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?r  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?r  ra   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r   g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?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     8g     Xg      g     }@g      Tg     Pr)	r   g     @g      E@g     H@g      m@g     @g     x@g     hg     L@)	r   g      jg     g     ؀@g     t@g     @g     g     p@g     K@)	r   g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@)	r   g     s@     zg     n@r  g     @h@g     {g      Zg     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   ghb$[@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       3i)ii    @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 sw   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 sw   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 sw   Y  t|jj	|  fdd}tjdd t|d|jd}	d|	t < W d    n1 sw   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  gS8(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  gelaz?g?2gZPd%q?g4g̚y?gC1|g֛x?gKcgE3-w?g-.f?`gsF]Fv?g@ʥugbu?gNgжlt?g=ЂgnTs?gQ3og,'* +=r?g)[n)!r  r  r  gl'V3r  r  r  r  r  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ibl3g%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  ir_   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{Gz?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
