
    ^Mh                    :   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	 ddlmZ n# e$ r dZY nw xY wd
Z 	 ddl!Z!ddl"m#Z$ n# e$ r dZ Y nw xY wd Z%d Z&d Z'd Z(	 	 dYdZ)d Z*d Z+dZdZ,d Z-d[dZ.d Z/ej0        j1        d             Z2d Z3ej0        j1        d             Z4d  Z5d! Z6dZ7dZ8dZ9dZ:dZ; G d" d#          Z<ej0        =                    d$           G d% d&e<                      Z>ej0        =                    d$           G d' d(e<                      Z?ej0        =                    d$           G d) d*e<                      Z@ G d+ d,e<          ZA G d- d.e>          ZB G d/ d0e>          ZC G d1 d2e>          ZD G d3 d4e?          ZEe r G d5 d6e?          ZFer G d7 d8e?          ZG G d9 d:e?          ZH G d; d<e?          ZIej0        =                    d$           G d= d>                      ZJ G d? d@e@          ZK G dA dBe@          ZL G dC dDeA          ZM G dE dFeA          ZN G dG dH          ZOej0        =                    d$           G dI dJ                      ZP G dK dLeP          ZQ G dM dNeP          ZR G dO dPeP          ZSej0        =                    d$           G dQ dR                      ZT G dS dTeT          ZU G dU dVeT          ZV G dW dXeT          ZWdS )\z"
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                     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maxiters     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   !   sJ    O;<<<CK'!#NOOOQ JKKKKK    c                 ^    t          | j         d           t          | j        dd           d S )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler!   '   s2    O;<<<Q DEEEEEr   c                 ^    t          | j         d           t          | j        dd           d S )Nr      z!failed to report unbounded statusr   r    s    r   _assert_unboundedr$   -   s2    O;<<<Q CDDDDDr   c                 `    t          | j         d           t          | j        dv d           d S )Nr   r      z%failed to report optimization failure)r   r   r   r    s    r   )_assert_unable_to_find_basic_feasible_solr(   3   s7     O;<<<CJ& "IJJJJJr   :0yE>c                     | j         s!d| j         d| j         }t          |          t	          | j        d           |t          | j        |d||           |t          | j        |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.   msgs         r   _assert_successr6   =   s    
 ; "D
DDs{DDS!!!Q L!	. 	. 	. 	. y E!	. 	. 	. 	. 	. 	. r   c           	      0   t           j                            d          }| | dz  dz   z  dz  }t          j        | dz            | dz  z  dz   }|                    | dz  | |           }t          j        | dz  | | f          }g }g }t          | dz            D ]^}|                                }d||ddddf<   |                    |	                                           |                    d           _t          |           D ]n}t          |           D ]\}	|                                }d|dd||	f<   |                    |	                                           |                    d           ]ot          |           D ]k}|                                }|dd|ddf         |dd|ddf<   |                    |	                                           |                    |           lt          |           D ]k}|                                }|dddd|f         |dddd|f<   |                    |	                                           |                    |           l|                                }|ddt          |           t          |           f         |ddt          |           t          |           f<   |                    |	                                           |                    |           |                                }|ddt          |           t          d|  dz
  d          f         |ddt          |           t          d|  dz
  d          f<   |                    |	                                           |                    |           t          j
        t          j        |          t                    }
t          j
        |t                    }|                    |
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cs                r   magic_squarerV   Q   s    )


"
"C	QTAXAi1ooA%)GooadAq))GHadAq\""EFF 1a4[[  

aAAAgemmoo&&&a 1XX  q 	 	AJJLLEE!!!Q'NMM%--//***MM!		 1XX  

 Aqqq)aaaAAAgemmoo&&&a 1XX  

 AAAq)aaaAgemmoo&&&a JJLLE#*111eAhha+@#AE!!!U1XXuQxx
 
MM%--//"""
MM!JJLLE588U2rAvr2223 
!!!U1XXuR!a,,
,-
MM%--//"""
MM!
6""%000A
u%%%AAaGQr   c                 T   t           j                            d          }|                    | |f           }t          j        | | |z  f          }t          j        |           }t          |           D ]}|dz   }d||||z  ||z  f<   || z  ||<   t          j        || |z  f          }t          j        |          }	t          |          D ]}|dz   }d|||d|f<   d|	|<   t          j        ||f          }
t          j        ||	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)	r;   r<   r=   exponentialr@   rA   rF   hstackravel)mrJ   rK   rU   ArowbrowrR   j1AcolbcolrS   rT   s               r   lpgen_2drc      s8   
 )


"
"C
//1v/
&
&&A8QAJD8A;;D1XX  U !QAb1f_a%Q8QAJD8A;;D1XX  UQ1WQ
	4,A
	4,Aa?r   c                 t   t           j                            |           }d\  }}}|                    |          dz
  }|                    ||          dz
  }|                    |          dz
  }|                    ||          dz
  }|                    |          dz
  }	|                    |           }
|                    |          }t           j         |
|
|                                 k     <   t           j        |||                                k    <   t          j        |
|f          j        }|||||	|fS )N)
      2         ?)r;   r<   r=   rH   infrF   T)seedrK   m_eqm_ubrJ   rU   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genru      s   
)


%
%CMD$CA88D!S D88D>>#D88D!S D88D>>#D
((1++B	!BF7BrSXXZZK&BrCHHJJYBx  "FdD$f,,r   c                  \    g d} g dg dg dg dg}g d}g dg}dg}g d	}d
}| ||||||fS )N)r8      r'   )ry      	   )r   r8   r   )re   ry      )rz   r8   r#   r'   )r|   rz   rx   rz   )r}   r   r   )gk椀?gs?r   gkL?gqY:^@ )rU   rn   ro   rp   rq   x_starf_stars          r   nontrivial_problemr      ss    ANNNNMMD >>DOOD4D555FFdD$ff44r   rw   r{   d   c                     t           j                            |           }|                    dd||f          }|                    |          }|                    dd||f          }|||z  z  |                    dd|          z   }t          j        ||z             }	d|	d|<   t          j                            d|z  ||z   f          }
d}t          |          D ]P}||dd|f         z  |
|d|f<   d|
|||z   f<   d|z  |dd|f         z  |
|dz   d|f<   d|
|dz   ||z   f<   |dz  }Q|

                                }
t          j        d|z            }||ddd<   | |ddd<   dg|z  d	g|z  z   }|	|
||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   rX   h㈵>Nr   r8   NNr   N)r;   r<   r=   normalrandnonesscipysparse
lil_matrixrA   tocscr@   )rk   r]   drJ   rK   phiw_truer2   yrU   rn   idxiiro   bndss                  r   l1_regression_probr      s    )


%
%C
**QA*
'
'CYYq\\F

1aq!f
%%A#'SZZ4aZ888A 	!AAbqbE<""AaC1:..D
CAhh  a2hS"1"WS!B$YS&1QQQU8+SUBQBYSUAbD[q::<<D8AaC==DDAJDAJ>!yk!m+DdD$r   c                    i fd}t          j        ddg          }ddgddgddgg}g d}t          ||||| j                  }t	          |d	dd
g           t          d         |d                    t          d         |d                    t          d         |d                    t          d         |d                    d S )Nc                 P   |                      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'   nitr2   r1   slackcon)popr   rA   
isinstanceintboolstr)r   r/   r   last_cbs      r   cbz!generic_callback_test.<locals>.cb   s    '')$$77:&&  F*+++!!U1XX-...
3775>>3//000
8T**+++
7C(()))3xUw<Ur   r|   r   r   r   re   rw   r'   rn   ro   callbackmethod      2rz   r3   r4   r1   r2   r   r   )r;   rE   r
   r   r6   r   )selfr   rU   rn   ro   r   r   s         @r   generic_callback_testr      s    G$ $ $ $ $ 	"bAFQFQF#D::D
!$TBt{
K
K
KCCUq!f====GENCJ///GCL#c(+++GENCJ///GG$c'l33333r   c                  b   t          j        ddg          } ddgddgddgg}g d}t          t          t          | ||d           t          t          t          | ||d	           d
}t          j        t          |          5  t	          | ||ddi           d d d            d S # 1 swxY w Y   d S )Nr|   r   r   r   r   r   ekki-ekki-ekkirn   ro   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrn   ro   options)r;   rE   assert_raises
ValueErrorr
   pytestwarnsr   )rU   rn   ro   r/   s       r    test_unknown_solvers_and_optionsr     s+   
"bAFQFQF#D::D*g$T2BD D D D*g$T,@ @ @ @NG	oW	5	5	5 9 94$&67	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   B$$B(+B(c                      t          j        ddg          } ddgddgddgg}g d}t          | ||d          }t          |d	dd
g           d S )Nr|   r   r   r   r   r   highsr   r   rz   r   )r;   rE   r
   r6   )rU   rn   ro   r   s       r   test_choose_solverr     sk    
"bAFQFQF#D::D
!T4
0
0
0CCUq!f======r   c                     t          j        t                    5  t          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr
   r   r   r   test_deprecationr   (  s~   	(	)	) , ,*++++, , , , , , , , , , , , , , ,	(	)	) - -+,,,,- - - - - - - - - - - - - - -	(	)	) % %)$$$$% % % % % % % % % % % % % % % % % %s0   8<<A::A>A>B==CCc            	         t          dd          } d}| j        dk    sJ | j                            |          sJ t	          d          \  }}}}}dgt          |          z  }dgt          |          z  }dd	i}	t          ||||d|	|
          } d}| j        dk    sJ | j                            |          sJ ddi}	t          ||||d|	          } d}| j        dk    sJ | j                            |          sJ t          ddd          } d}| j        dk    sJ | j                            |          sJ t          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   rz   r   r   
time_limit皙?)rU   rp   rq   rt   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   re   highs-dsrU   rp   rq   rt   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r8   )rt   r   z+The problem is infeasible. (HiGHS Status 8:r   r8   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/   
startswithrV   lenscipy.optimize._linprog_highsr   )r   r5   rS   rT   rU   rM   rL   rt   r   r   r   r   r/   s                r   test_highs_status_messager   2  sV   
!G
$
$
$C
BC:????;!!#&&&&&&q//Aq!WaXAF#A,KS!G
AAAfW!{< < <C
1C:????;!!#&&&&&"oG
AAAfZ!# # #C
6C:????;!!#&&&&&
!GG
4
4
4C
7C:????;!!#&&&&&
"W
%
%
%C
7C:????;!!#&&&&&LLLLLL44RBBOFG
GCQ;;;;c"""""44T4@@OFG
JCQ;;;;c"""""""r   c                  <    t          ddgddggdgddg           d S )Nr   r8   r         rn   ro   r   )r
   r   r   r   test_bug_17380r   _  s/    QF2q'$aVDDDDDDr   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej        j        d	             Zej        j        d
             Zd Zd Zd Zd Zd Zej        j        d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRej        S                    eTjU        dNk    dOP          dQ             ZVdRS )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                 $    t          |            d S N)r   r   s    r   test_callbackz LinprogCommonTests.test_callback{  s    d#####r   c                     t          dd          \  }}}t          |||| j        ddi          }t          |d           d S )Nrf   dispTrn   ro   r   r   T*Pr3   rc   r
   r   r6   r   rS   rT   rU   r   s        r   	test_dispzLinprogCommonTests.test_disp~  sU    2r""1aaaa%tn. . .777777r   c                     ddg}ddgddgg}ddg}d}d}t          |||||f| j        | j        	          }t          |d
           d S )Nr8   r'   r|   r   r   rz   r   r|   N)rn   ro   rt   r   r   r   )r
   r   r   r6   )r   rU   rS   rT   	x0_bounds	x1_boundsr   s          r   test_docstring_examplez)LinprogCommonTests.test_docstring_example  sv    G!Wq!fF 		aaaI0F"l4;@ @ @------r   c           	      l    dg}dgg}d}t          t          t          |||| j        | j                   d S )Nr   hellorp   rq   r   r   )r   	TypeErrorr
   r   r   )r   rU   rp   rq   s       r   test_type_errorz"LinprogCommonTests.test_type_error  sT     Cuid![$,	@ 	@ 	@ 	@ 	@ 	@r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |||t
          t          || j        | j                  }t          |ddg           t          ||           d S )N      ?      @      r   r   r   r   )r;   rE   rB   ri   r
   rp   rq   r   r   r6   r   )r   rU   rn   	b_ub_origro   rt   r   s          r   test_aliasing_b_ubz%LinprogCommonTests.test_aliasing_b_ub  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @t<<<<	4(((((r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |t
          t          |||| j        | j                  }t          |ddg           t          ||           d S )Nr   r   r   r   r#   r   )r;   rE   rB   ri   r
   rn   ro   r   r   r6   r   )r   rU   rp   	b_eq_origrq   rt   r   s          r   test_aliasing_b_eqz%LinprogCommonTests.test_aliasing_b_eq  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @qc::::	4(((((r   c           
          dg}dgg}dg}dgg}dg}d}t          ||||||| j        | j                  }t          |ddg           d S )Nr   r   g       @)            $@r   r   r   )r
   r   r   r6   r   rU   rn   ro   rp   rq   rt   r   s           r   test_non_ndarray_argsz(LinprogCommonTests.test_non_ndarray_args  sy     EwuwuatT4![$,@ @ @qc::::::r   c                      t          j        ddg          }ddgddgddgg}g d}	 	 d fd	} fd j        D             }d	|d
<   t          t          |||||           d S )Nr|   r   r   r   r   r   c           
      @    t          | |||||j        |           d S Nr   r
   r   )rU   rn   ro   rp   rq   rt   r   r   s          r   fz2LinprogCommonTests.test_unknown_options.<locals>.f  s7    AtT4v;9 9 9 9 9 9r   c                 ,    i | ]}|j         |         S r   r   .0keyr   s     r   
<dictcomp>z;LinprogCommonTests.test_unknown_options.<locals>.<dictcomp>  "    <<<S$,s#<<<r   *   spamr   )NNNNNN)r;   rE   r   r   r   )r   rU   rn   ro   r  os   `     r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s    Hb"XAAA'zz,0.2	9 	9 	9 	9 	9 	9
 =<<<t|<<<&	_aTa	9 	9 	9 	9 	9 	9r   c           	      B   t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t           j                            t                    5  t          ||||| j        |          }d d d            n# 1 swxY w Y   t           j        	                    |j
        dd	g           t           j        	                    |j        d
           d S )Nr8   r   r#   r   r      r  r   rU   rn   ro   rt   r   r   ?ffffff@ffffff)r;   rE   ri   r   testingr   r   r
   r   r   r2   r1   r   rn   ro   rU   rt   r   r   s          r   test_integrality_without_highsz1LinprogCommonTests.test_integrality_without_highs  sZ   
 x"a1a&1a&122x$$Xq!fbf+Q'cCFFlZ$$_55 	G 	GADtF!%+G G GC	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	
""353*555

""37D11111s   !CCCc                     d fd	}t          t          |g dddg           t          j                                        5 }|                    t          d           t          t          |g dg d           d d d            n# 1 swxY w Y   t          t          |g dddg           t          t          |d	d
gd	d
ggd	d
g           t          t          |d	d
gd	ggd	g           t          t          |d	d
gd	d
ggd	d
g           t          t          |d	d
gd	ggd	g           t          t          |d	d
gd	gd	           d j        v r j        d         rd S t          t          |d	d
gt          j        d          d	           d S )Nc           
      J    t          | |||||j        j                   d S r  r
   r   r   rU   rn   ro   rp   rq   rt   r   s         r   r  z1LinprogCommonTests.test_invalid_inputs.<locals>.f  9    AtT4v;> > > > > >r   r   r   r#   r   r#   r'   rt   zCreating an ndarray from ragged)r   r!  )r#   r'      r   r   r   r   )rn   ro   )rp   rq   _sparse_presolve)r   r   r#   )rn   rq   NNNNN)	r   r   r;   r  r   filterr   r   r@   )r   r  sups   `  r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  s   	> 	> 	> 	> 	> 	>
 	j!YYY7GHHHHZ))++ 	XsJJ02STTT*a;V;V;VWWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	j!YYY7HIIII 	j!aVAq6(!QHHHHj!aVA3%qcBBBBj!aVAq6(!QHHHHj!aVA3%qcBBBBj!aV1#A>>>> $,../0 /F 	j!aV"(92E2EANNNNNNs   8BB
B
c           	          d fd	}t           j                            d          }d}d}t          j                            ||d          }|                    |          }|                    |          }||                    |          z   }||                    |          z
  }	t          j        |	|f          }
||z  } j        dv rYt          t          d j         d	          5  t          ||||
 j         j        
           d d d            d S # 1 swxY w Y   d S i  j        } j        dv rd|d<   t          ||||
 j        |
          }|j        sJ d S )Nc           
      J    t          | |||||j        j                   d S r  r  r  s         r   r  z5LinprogCommonTests.test_sparse_constraints.<locals>.f  r  r   r   r      rh   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r&  )r;   r<   r=   r   r   rH   r   column_stackr   r   r   r
   r   r   )r   r  rK   r]   rJ   rp   x_validrU   rs   rr   rt   rq   r   r   s   `             r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  s   	> 	> 	> 	> 	> 	> i##A&&|  As++))A,,IIaLLsxx{{"sxx{{""b**g~;888z 2NDK 2N 2N 2N O O O B B!$T&#{DLB B B BB B B B B B B B B B B B B B B B B B '&G{000$(!ADtF!%g? ? ?C;s   ) DDDc                     g d}g dg dg dg}g d}t           j                            d           d}t          |||| j        d|i	          }t          ||           t          |j        |           d S )
Nr'   rw   r#   r   r   r   r   r#  r#   r8   r   r   r#         @rw   r   r8   r   rw   re   r'   r   r   r8         iX  r   r#   r   r   )r;   r<   rk   r
   r   r   r   r   )r   rU   rS   rT   r   r   s         r   test_maxiterzLinprogCommonTests.test_maxiter"  s    !!!   " OO
	qaaa('24 4 4'W555SWg&&&&&r   c                    | j                             dd          }t          dgd| j        | j                   }t	          |dd           |rt          |j        d           t          g dg d| j        | j                   }t	          |d	g d
           |rt          |j        d           t          ddgddg| j        | j                   }t	          |dddg           |rt          |j        d           t          g dg dg dgddgg d| j        | j                   }t	          |dg d           |rt          |j        d           d S d S )NpresolveTr   )r   r   rt   r   r   r   r   ))r#  r#  )r8   r8   )r#   r#   r  )r#  r8   r#   )r   r#   r   )r   r   r   r   r   r   r   r   r   r~   ))r#  )r   re   )      @r@  rp   rq   rt   r   r      )r   r~   r@  )r   getr
   r   r6   r   r   r   do_presolver   s      r   test_bounds_fixedz$LinprogCommonTests.test_bounds_fixed1  s   
 l&&z488qc&![$,@ @ @Q""" 	%!$$$iii(B(B(B![$,@ @ @R,,, 	%!$$$q!fff%5![$,@ @ @QA''' 	%!$$$iiiyyy)))&<Aq6;;;![$,@ @ @ 	R--- 	%!$$$$$	% 	%r   c                    | j                             dd          }t          dgd| j        | j                   }t	          |           |rt          |j        d           t          dgdg| j        | j                   }t	          |           |rt          |j        d           t          g dg d| j        | j                   }t	          |           |rt          |j        d           d S d S )	Nr;  Tr   r$  r<  r   r   ))r#  r   r   r!  )r   rC  r
   r   r!   r   r   rD  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleQ  s   
 l&&z488qc'$+t|TTT3 	%!$$$qc7)DKVVV3 	%!$$$iii(@(@(@![$,@ @ @3 	%!$$$$$	% 	%r   c                      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}t          j        t                    5  t          j        t                    5   |||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5  t          j        t                    5   |||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S t          || j         j         	          }t          |           |rt          |j        d
           t          || j         j         	          }t          |           |rt          |j        d
           d S d S )Nr;  Tr   r   r   r!  c                 B    t          | |j        j                  }|S )Nr<  r  )rU   rt   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gz  s,    a%)[$,H H H
r   r"  rU   rt   r   r   r   )r   rC  r   r;   ri   r   r   RuntimeWarningr	   
IndexErrorr
   r!   r   r   )r   rE  simplex_without_presolverU   bounds_1bounds_2rK  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2h  s    l&&z488'2?#Ot{i7O IIRVRV,f5bfWrvg.7# 	)    
 n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * Ah!%dlD D DCs### )SWa(((Ah!%dlD D DCs### )SWa((((() )sl   C!B;/C;B?	?CB?	CCC6ED*E*D.	.E1D.	2EE	Ec                 d    ddg}t          || j        | j                  }t          |           d S )Nr8   r   r   )r
   r   r   r$   )r   rU   r   s      r   test_empty_constraint_1z*LinprogCommonTests.test_empty_constraint_1  s7    HaT\BBB#r   c                    g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |           | j                            dd          rt          |j        d           d S d S )N)r8   r   r8   r   r   r8   r   r<  r;  T)	r;   ri   r
   r   r   r$   rC  r   r   r   rU   rt   r   s       r   test_empty_constraint_2z*LinprogCommonTests.test_empty_constraint_2  s    NNbf+|Wg>a![$,@ @ @#<J-- 	%!$$$$$	% 	%r   c                     g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |g dd           d S )N)r   r8   r   r8   r   rV  r<  )r   r   r8   r   r   r4   r3   )r;   ri   r
   r   r   r6   rW  s       r   test_empty_constraint_3z*LinprogCommonTests.test_empty_constraint_3  sj    NNbf+|Wg>a![$,@ @ @}}}"EEEEEEr   c           
          t          j        ddg          dz  }ddgddgddgg}g d}t          |||t          t          t
          | j        | j                  }t          |ddd	g
           d S )Nr#   r   r8   r   r   r   r   irz   r   	r;   rE   r
   rp   rq   rt   r   r   r6   r   rU   rn   ro   r   s        r   test_inequality_constraintsz.LinprogCommonTests.test_inequality_constraints  s     HaVr!AAA zzatT4![$,@ @ @A??????r   c           
          ddg}ddgddgddgg}g d}t          |||t          t          t          | j        | j                  }t          |d	d
dg           d S )Nrz   r#   r   r8   r   r   )r   r8   r8   r   r#  gUUUUUU?gUUUUUU?r   r
   rp   rq   rt   r   r   r6   r^  s        r   test_inequality_constraints2z/LinprogCommonTests.test_inequality_constraints2  s     FARQ {{atT4![$,@ @ @uenEEEEEEr   c           
      :   ddg}d}t          |t          t          t          t          || j        | j                  }t          |ddg           ddg}t          |t          t          t          t          || j        | j                  }t          |ddg           d S )Nr   r   r   r   r4   )r
   rn   ro   rp   rq   r   r   r6   rW  s       r   test_bounds_simplez%LinprogCommonTests.test_bounds_simple  s    FatT4![$,@ @ @1v....&!atT4![$,@ @ @1v......r   c           
         t          j        dg          }t          j        dgg          }t          j        dg          }d}t          |t          t          |||| j        | j                  }t          |ddg           d S )Nr   r   )r   Nr   r#   r   r;   rE   r
   rn   ro   r   r   r6   r   rU   rp   rq   rt   r   s         r   test_bounded_below_only_1z,LinprogCommonTests.test_bounded_below_only_1  s    HcUOOx#  xatT4![$,@ @ @qc::::::r   c           
      <   t          j        d          }t          j        d          }t          j        g d          }dt           j        f}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr#   r   rh   r   rZ  r;   r   eyerE   ri   r
   rn   ro   r   r   r6   sumrh  s         r   test_bounded_below_only_2z,LinprogCommonTests.test_bounded_below_only_2  s    GAJJvayyx			""rvatT4![$,@ @ @tFFFFFFr   c           
         t          j        dg          }t          j        dgg          }t          j        dg          }d}t          |t          t          |||| j        | j                  }t          |ddg           d S )Nr   r   )Nr   r   r#   r   rg  rh  s         r   test_bounded_above_only_1z,LinprogCommonTests.test_bounded_above_only_1  s    HcUOOx#  xatT4![$,@ @ @qc::::::r   c           
      >   t          j        d          }t          j        d          }t          j        g d          }t           j         df}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr#   r   r'   r   rZ  rk  rh  s         r   test_bounded_above_only_2z,LinprogCommonTests.test_bounded_above_only_2  s    GAJJvayyx			""6'1atT4![$,@ @ @tFFFFFFr   c           
      R   t          j        d          }t          j        d          }t          j        g d          }t           j         t           j        f}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr#   r   r   rZ  rk  rh  s         r   test_bounds_infinityz'LinprogCommonTests.test_bounds_infinity  s    GAJJvayyx			""6'26"atT4![$,@ @ @tFFFFFFr   c           
      `   t          j        ddg          dz  }t          j        ddgddggt           j                  }ddg}t           j         t           j        f}dt           j        f}||f}t	          |||t
          t          || j        | j                  }t          |d	d
dg           d S )Nr8   r'   r|   r   r   r9   rz   r   gm۶m&g$I$Ig%I$I@r   )
r;   rE   float64ri   r
   rp   rq   r   r   r6   )r   rU   rn   ro   r   r   rt   r   s           r   test_bounds_mixedz$LinprogCommonTests.test_bounds_mixed  s     Hb!W"x"aQ!(*
4 4 41vfWbf%	L	Y'atT4![$,@ @ @VV<LMMMMMMr   c           
          ddg}ddgddgddgg}g d}dd	g}t          |||t          t          || j        | j        
          }t          |           d S Nr   r   r~   r   r   r   )   r   r#   r   r   r   r   )r
   rp   rq   r   r   r!   r   rU   rn   ro   rt   r   s         r    test_bounds_equal_but_infeasiblez3LinprogCommonTests.test_bounds_equal_but_infeasible  sv    GB!Q!R)zz)$atT4![$,@ @ @3r   c           
          ddg}ddgddgddgg}g d}dd	g}t          |t          t          |||| j        | j        
          }t          |           d S ry  )r
   rn   ro   r   r   r!   rh  s         r   !test_bounds_equal_but_infeasible2z4LinprogCommonTests.test_bounds_equal_but_infeasible2  sv    GB!Q!R)zz)$atT4![$,@ @ @3r   c           
           ddg}ddgddgg}ddg}ddg} fd	 j         D             }d
|d<   t          |||t          t          | j        |          }t          |           d S )Nr   r   g?g@r'   rw   r   r{  c                 ,    i | ]}|j         |         S r   r  r  s     r   r  zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>$  r  r   Fr;  r   )r   r
   rp   rq   r   r!   r   rU   rn   ro   rt   r  r   s   `      r   test_bounds_equal_no_presolvez0LinprogCommonTests.test_bounds_equal_no_presolve  s    
 FAc
#1v&!<<<<t|<<<*atT4![!5 5 53r   c           
      d   d\  }}t           j                            d          }|                    |          }d|d<   |                    ||          }d|d d df<   |                    |          }g dg}d}g d}	t	          ||||||	| j        | j                  }
t          |
d	           d S )
Nr!  r   r   )r   r   r   r   r#   )r}   re   r  )r}   Nr   r   gyMj#r   )r;   r<   r=   rH   r
   r   r   r6   )r   r]   rJ   rK   rU   rp   rq   rn   ro   rt   r   s              r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1+  s    1i##A&&HHQKK!xx1~~QQQT
xx{{~BBBatT4![$,@ @ @)<======r   c           
      h   | j         dv rt          j                     t          j                            d          }d\  }}|                    |          }d|d<   |                    ||          }d|d d df<   |                    |          }|                    ||          }d|d d df<   |                    |          }d}	t          ||||||	| j         | j                  }
t          |
           | j        
                    dd	          r d
| j         vrt          |
j        d           d S d S d S )N>   r   	highs-ipmr   r&   r8   r   r   r   r;  Tr   )r   r   xfailr;   r<   r=   rH   r
   r   r$   rC  r   r   )r   rK   r]   rJ   rU   rp   rq   rn   ro   rt   r   s              r   test_zero_column_2z%LinprogCommonTests.test_zero_column_2:  sB   ;333LNNNi##A&&1HHQKK!xx1~~QQQT
xx{{xx1~~QQQT
xx{{atT4![$,@ @ @#<J-- 	%'2L2L !$$$$$		% 	%2L2Lr   c           
          g d}g dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |d           d S )Nr   r   r   r   r   r   r   r   r#   r   r   r#   r   r
   rn   ro   rt   r   r   r6   r   rU   rp   rq   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1U  sq    II		999iii0yyatT4![$,@ @ @++++++r   c           
          g dg dg dg}g d}g d}t          |||t          t          t          | j        | j                  }t          |d           d S )Nr  r  r  r   r   r   r   ra  )r   rn   ro   rU   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2]  sq    		999iii0yyIIatT4![$,@ @ @++++++r   c           
         d\  }}t           j                            d          }|                    |          }|                    ||          }d|dd d f<   |                    |          }t	          |t
          t          ||t          | j        | j	                  }t          |           | j	                            dd          rt          |j        d           d S d S Nr&   i  r   r   r;  T)r;   r<   r=   rH   r
   rn   ro   rt   r   r   r!   rC  r   r   )r   r]   rJ   rK   rU   rp   rq   r   s           r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3e  s    1i##D))HHQKKxx1~~QT
xx{{atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
         d\  }}t           j                            d          }|                    |          }|                    ||          }d|dd d f<   |                    |           }t	          |||t
          t          t          | j        | j	                  }t          |           | j	                            dd          rt          |j        d           d S d S r  )r;   r<   r=   rH   r
   rp   rq   rt   r   r   r!   rC  r   r   )r   r]   rJ   rK   rU   rn   ro   r   s           r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4t  s    1i##D))HHQKKxx1~~QT
|atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
         g d}g dg dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |           | j                            dd          rt          |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
   rn   ro   rt   r   r   r!   rC  r   r   r  s        r   test_singleton_row_eq_1z*LinprogCommonTests.test_singleton_row_eq_1  s    LLlllLLL,,,G||atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          g d}g dg dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |d           d S )	Nr  r  r  r  )r   r   r   r'   r   r'   r   r  r  s        r   test_singleton_row_eq_2z*LinprogCommonTests.test_singleton_row_eq_2  sw    LLlllLLL,,,G||atT4![$,@ @ @++++++r   c           
         g d}g dg dg dg dg}g d}g d}t          |||t          t          || j        | j                  }t          |           | j                            d	d
          rt          |j        d           d S d S )Nr  r  r  r8   r   r   r   r  )r   r   r   r'   r   r   r   r   r   r;  Tr   	r
   rp   rq   r   r   r!   rC  r   r   r|  s         r   test_singleton_row_ub_1z*LinprogCommonTests.test_singleton_row_ub_1  s    LLlllMMM<<<H}}@@@atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          g d}g dg dg dg dg}g d}g d}t          |||t          t          || j        | j                  }t          |d	
           d S )Nr  r  r  r  r  )r   r         r'   r  r   rh   r   )r
   rp   rq   r   r   r6   r|  s         r   test_singleton_row_ub_2z*LinprogCommonTests.test_singleton_row_ub_2  s    LLlllMMM<<<H@@@atT4![$,@ @ @------r   c           
          ddg}ddgddgddgg}g d}t          |||t          t          t          | j        | j                  }t          |           d S )Nr8   r   r   )r   r   r?  r   )r
   rp   rq   rt   r   r   r!   r^  s        r   test_infeasiblez"LinprogCommonTests.test_infeasible  sr    HAAR zzatT4![$,@ @ @3r   c           
          dg}dgg}d}d}t          |||t          t          || j        | j                  }t          |           | j                            dd          rt          |j        d           d S d S )	Nr   r   r'   )r#  rz   r   r;  Tr   r  r|  s         r   !test_infeasible_inequality_boundsz4LinprogCommonTests.test_infeasible_inequality_bounds  s    CuatT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          t          j        ddg          dz  }ddgddgg}ddg}t          |||t          t          t
          | j        | j                  }t          |           d S )Nr   r8   r   r   )	r;   rE   r
   rp   rq   rt   r   r   r$   r^  s        r   test_unboundedz!LinprogCommonTests.test_unbounded  sx    HaVr!QRBxatT4![$,@ @ @#r   c                      dg}dg} fd j         D             }d|d<   t          || j        |          } j        dk    rt          |j        d           d S t          |           d S )	Nr   Nr   c                 ,    i | ]}|j         |         S r   r  r  s     r   r  zQLinprogCommonTests.test_unbounded_below_no_presolve_corrected.<locals>.<dictcomp>  r  r   Fr;  rL  r   r#  )r   r
   r   r   r   r$   )r   rU   rt   r  r   s   `    r   *test_unbounded_below_no_presolve_correctedz=LinprogCommonTests.test_unbounded_below_no_presolve_corrected  s    C<<<<t|<<<*&![! ! ! ;+++Q'''''c"""""r   c           
         t          j        g d          }t          j        g dg dg dg          }t          j        g d          }g d}t          |||t          t          || j        | j                  }t          |           | j                                        	                    d          sDt          |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   r8   r8   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r8   r   r   r   )r   r   r   rV  rV  r   r   r   r8   N$   $The problem is (trivially) unboundedr;   rE   r
   rp   rq   r   r   r$   lowerr   r   r2   ri   r/   r|  s         r   *test_unbounded_no_nontrivial_constraints_1z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1  s%   
 H)))**x++++++,,,. / / x


##/ / /atT4![$,@ @ @#{  ""--g66 	ArBF+++SbS)?A A A A A	A 	Ar   c           
         t          j        g d          }t          j        g dg dg dg          }t          j        g d          }g d}t          |||t          t          || j        | j                  }t          |           | j                                        	                    d          sEt          |j        d	         t           j                    t          |j        d
d         d           d
S d
S )r  )r   r   r   r   r8   r   r  r  )r   r   r   r   r   r   r  )r   r   r   rV  rV  )Nr   r   r   r8   Nr  r  r  r|  s         r   *test_unbounded_no_nontrivial_constraints_2z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2  s'   
 H((())x+++++++++- . . x


##/ / /atT4![$,@ @ @#{  ""--g66 	ArRVG,,,SbS)?A A A A A	A 	Ar   c           
          t          j        g d          dz  }g dg dg dg}g d}t          |||t          t          t
          | j        | j                  }t          |g dd	d
           d S )N)r   re   r   r8   r=  )rf   r   r   )   rf   r   )r   r   '  r   )r   r   r  gh㈵>Hz>)r4   r.   r-   r]  r^  s        r   test_cyclic_recoveryz'LinprogCommonTests.test_cyclic_recovery  s     H\\\""R'		

 atT4![$,@ @ @}}}4dKKKKKKr   c           
         t          j        g d          }t          j        g dg dg dg          }g d}d}d | j                                        D             }||d<   t	          |||t
          t          t          | j        |	          }| j        d
k    r2| j        	                    d          st          ||d                    d S t          |g d           d S )N)r}   9   r{   g      8@)rh   g      r   r{   )rh   g      r  r   r  )r   r   r   r   c                     i | ]\  }}||	S r   r   )r	  r
  vals      r   r  z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>  s    ;;;(#sS#;;;r   r   r   r   bland)r   r   r   r   rd  )r;   rE   r   itemsr
   rp   rq   rt   r   rC  r   r6   )r   rU   rn   ro   r   r  r   s          r   test_cyclic_blandz$LinprogCommonTests.test_cyclic_bland  s   H&&&''x------%' ( ( yy ;;dl&8&8&:&:;;;)atT4![!5 5 5 ;)##DL,<,<W,E,E#+C9>>>>> C<<<888888r   c                    d\  }}t           j                            d          }|                    |          }|                    ||          }|                    |          }d|dd d f         z  |dd d f<   |dxx         dz  cc<   t	                      5 }|                    t          d           t          |t          t          ||t          | j        | j                  }d d d            n# 1 swxY w Y   t          |           d S )N)re   re   r   r   r   r8   A_eq does not appear...r   )r;   r<   r=   rH   r   r'  r   r
   rn   ro   rt   r   r   r!   )	r   r]   rJ   rK   rU   rp   rq   r(  r   s	            r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility,  sL    1i##A&&HHQKKxx1~~xx{{$r111u+oRURB   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	3s   AC11C58C5c           
          t                      \  }}}}}}}t          |||||t          | j        | j                  }t          |||           d S )Nr   r   )r   r
   rt   r   r   r6   	r   rU   rn   ro   rp   rq   r   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem@  sf     5G4H4H14tT66atT4![$,@ @ @6BBBBBBr   c                    t          dd          \  }}}t                      5 }|                    t          d           |                    t          d           |                    t
                     t          |||t          t          t          | j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )Nrf   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rc   r   r'  r   rM  r   r
   rp   rq   rt   r   r   r6   )r   rn   ro   rU   r(  r   s         r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problemH  s
    !R((dA   	DCJJ(NOOOJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	777777s   BB00B47B4c                    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                      5 }|                    t                     t          |t          t
          ||t          | j        | j                  }d d d            n# 1 swxY w Y   t          |ddd	           d S )
N)r   r'   r{      r'   r#   rw   r~   r   rB        rV  r   )r      i!   r   r   ir   i  ư>r  )r3   r.   r-   )
r   r'  r   r
   rn   ro   rt   r   r   r6   )r   rU   rJ   prp   rq   r(  r   s           r   test_network_flowz$LinprogCommonTests.test_network_flowU  s    54411aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a02 +**   	DCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	4dCCCCCCs   9ACCCc                 R   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                      5 }t          r|                    t                     |                    t          d	           |                    t
          d
           |                    t
          d           |                    t                     t          |t          t          |||| j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r#   r   r   r'   r   r#   r#  rV  )r   r   r   r'   scipy.linalg.solve
Ill...r  Solving system with option...r   rz  r   )r   has_umfpackr'  r   rM  r   r   r
   rn   ro   r   r   r6   )	r   rU   rt   rJ   r  rp   rq   r(  r   s	            r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityj  s    OOFFFFF 11aO1aO1aO1aO	
 }}   		DC +

>***JJ~'CDDDJJ(ABBBJJ(GHHHJJ}%%%!T4tV!%dlD D DC		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 	,,,,,,s   B8DDDc           
          g d}g dg dg}ddg}t          |||t          t          t          | j        | j                  }t          |d           d S )	N)r   r|   r   )r#   r   r   )r   r#  r#   re   rB  r   ir   ra  r^  s        r   (test_simplex_algorithm_wikipedia_examplez;LinprogCommonTests.test_simplex_algorithm_wikipedia_example  sp    LLIIII BxatT4![$,@ @ @------r   c           
          g d}g dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |dg dd	d
           d S )Nr1  r2  r3  r5  r6  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r3   r4   r.   r-   r  r  s        r   test_enzo_examplez$LinprogCommonTests.test_enzo_example  s     !!!   " atT4![$,@ @ @"@"@"@!	. 	. 	. 	. 	. 	.r   c                 B   g d}g dg dg dg dg dg}g d}t                      5 }|                    t          d           t          |t          t
          ||t          | j        | j        	          }d d d            n# 1 swxY w Y   t          |d
g d           d S )N)r  g333333@g%@r  g333333g%)r8   r8   r8   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r  皙?333333?r  r  r  r   gRQ)r  g?        r  r   r  r   )
r   r'  r   r
   rn   ro   rt   r   r   r6   )r   rU   rp   rq   r(  r   s         r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  s3   ///%%%""""""""""""	$
 *))   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	"@"@"@	B 	B 	B 	B 	B 	Bs   AB  BBc           
         d}t          j        |           }dt           j        z  t          j        d|dz             z  |dz   z  }t          j        t          j        |          dz
  t          j        |          f          }ddg}t          |t          t          ||t          | j        | j                  }t          |dt          j        |                     d S )Nrf   r   r   r   r   r   )r;   r   pir>   rF   cossinr
   rn   ro   rt   r   r   r6   r@   )r   r]   rU   tmprp   rq   r   s          r   #test_enzo_example_c_with_degeneracyz6LinprogCommonTests.test_enzo_example_c_with_degeneracy  s    WQZZK"%i")Aq1u---Q7y"&++/26#;;7881vatT4![$,@ @ @bhqkkBBBBBBr   c           
         d}t          j        |           }dt           j        z  t          j        |          z  |dz   z  }t          j        |          dz
  }d|d<   t          j        |          }d|d<   t          j        ||f          }ddg}t          |t          t          ||t          | j        | j                  }t          |           d S )Nrg   r   r   r  r   r   )r;   r   r  r>   r  r  rF   r
   rn   ro   rt   r   r   r$   )	r   r]   rU   r  row0row1rp   rq   r   s	            r   &test_enzo_example_c_with_unboundednessz9LinprogCommonTests.test_enzo_example_c_with_unboundedness  s    WQZZK"%i")A,,&!a%0 vc{{QQvc{{Qy$&&1vatT4![$,@ @ @#r   c           
          d}t          j        |           }dt           j        z  t          j        |          z  |dz   z  }t          j        t          j        |          dz
  t          j        |          f          }ddg} fd j        D             }d|d<   t          |t          t          ||t           j        |          }t          |           d S )Nrg   r   r   c                 ,    i | ]}|j         |         S r   r  r  s     r   r  zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>  r  r   Fr;  r   )r;   r   r  r>   rF   r  r  r   r
   rn   ro   rt   r   r!   )r   r]   rU   r  rp   rq   r  r   s   `       r   &test_enzo_example_c_with_infeasibilityz9LinprogCommonTests.test_enzo_example_c_with_infeasibility  s    WQZZK"%i")A,,&!a%0y"&++/26#;;7881v<<<<t|<<<*atT4![!5 5 53r   c           
         t          j        g d          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g dg d	g          }t          j        d
d
g          }t          |||||t          | j        | j                  }t          |d
t          j        |          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   r8   r   r8   r   )r   r   r8   r   r8   r   r   r   g>)r3   r4   r.   )r;   rE   r
   rt   r   r   r6   
zeros_like)r   rU   rn   ro   rp   rq   r   s          r   test_basic_artificial_varsz-LinprogCommonTests.test_basic_artificial_vars  s
   
 H>>>??x---/D/D/D...0D0D0D///1 2 2 x22233x///1H1H1HIJJxAatT4![$,@ @ @bmA6F6F!	# 	# 	# 	# 	# 	#r   c           
         t          d          \  }}}}}}t          ||||||| j        | j                  }t	          |j                   t	          |j                   t	          |j                    d| j        vrt	          |j        dk               t          ||j
        z  |j                   t          |||j
        z  z
  |j        d           t          |||j
        z  z
  |j        d           dD ]h}||                                v rPt          ||         d         t           j                  sJ t          ||         d	         t           j                  sJ id S )
Nr   rn   ro   rp   rq   rt   r   r   r   z%Optimization terminated successfully.gdy=r.   )eqlinineqlinr  upper	marginalsresidual)ru   r
   r   r   r   r   r   r   r/   r   r2   r1   r   r   keysr   r;   ndarray)	r   rU   rn   ro   rp   rq   rt   r   r
  s	            r   test_optimize_resultz'LinprogCommonTests.test_optimize_result  sl   ,;A,>,>)4tT6adDt#DKO O OCJ$+%%CK#JJKKKCE	37+++tce|+SW5AAAAtce|+SYUCCCC9 	D 	DCchhjj  !#c(;"7DDDDD!#c(:"6
CCCCC	D 	Dr   c           /         g d}d}d}d}t          j        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          j        g d!          }t          j        g d"          }t                      5 }|                    t          d#           |                    t
          d$           |                    t                     t          |||t          t          || j
        | j        %          }	d d d            n# 1 swxY w Y   t          |	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   r|   r   r   r   r8   r8   r   r8   r8   r   r   r   r   r   r   r   r   g333333r|   r8   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   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   )r;   rE   r   r'  r   rM  r   r
   rp   rq   r   r   r6   )
r   rt   r  rK  hrn   ro   rU   r(  r   s
             r   test_bug_5400z LinprogCommonTests.test_bug_5400  sw   N N N xNNN4Ar1b!QAr1aAq!L1aAr2r1b"aAq!QJEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFb"aAr1aAq!Q1aK1aBAq!RAq!Q1aHCaAq"b!Q1aAq!L1aQAq!QAq!Q1aHBQ1aB1aAq!QJ1aRAq!Q2q!Q1aH7J K K: x 5 5 5 6 6 H 4 4 4 5 5   	DCJJ=? ? ?JJ~'BCCCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	)<======s   2A<F::F>F>c           
         t          j        g d          }t          j        g dg dg          }t          j        ddg          }t          j        g dg           }t          j        dg           }d}t          ||||||| j        | j        	          }t          |d
t          j        g d                     d S )Nr  )r   r  r  )     @r  r  g      @r  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r#  g@r#  r   r;   rE   r
   r   r   r6   )r   rU   rp   rq   rn   ro   rt   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139C  s     HYYYx'<'<'<=>>x9::2223444)%%%atT4![$,@ @ @ 	"$(<<<"8"8	: 	: 	: 	: 	: 	:r   c                    t          j        g dg          }t          j        dg          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g d	g d
g          j        }t          j        g d          }t                      5 }t          r|                    t                     |                    t          d           |                    t          d           |                    t          d           |                    t                     t          ||||||| j        | j                  }d d d            n# 1 swxY w Y   d}	t          j        g d          }
t          ||	|
           d}t          |d d df         |z
  |j                   t          |j        |d d df         |z              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  rh   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  rh   r  r  r  r  r   r  r   r   )r;   rE   rj   r   r  r'  r   r   rM  r   r
   r   r   r6   r   r2   )r   rp   rq   rn   ro   rt   rU   r(  r   r3   r4   r.   s               r   test_bug_6690z LinprogCommonTests.test_bug_6690Y  s   
 x@@@ABBx!!x444***---999...
   x999::MMMHHH
    	 H         		DC +

>***JJ>@ @ @JJ(NOOOJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D %H G G G H H		JJJJ &A,-su555#%1!455555s   )B.E##E'*E'c                 Z   t          d          \  }}}}}t                      5 }|                    t          d           |                    t          d           |                    t
                     t          |t          t          ||t          | j
        | j                  }d d d            n# 1 swxY w Y   d}t          ||           t          |                    |j                  |           t!          t#          j        |j        j                  dz
  |j                   d S )Nr#   r  r  r   -U?r   r   )rV   r   r'  r   rM  r   r
   rn   ro   rt   r   r   r6   r   dotr2   r   r;   r@   rY   )r   rp   rq   rU   _r(  r   r3   s           r   test_bug_7044z LinprogCommonTests.test_bug_7044  sQ   
 +1oodAq!   	DCJJ(ABBBJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D "5555..."(35:..5su=====s   BB11B58B5c                    t          j        g d          }t          j        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          j        g d          }t          j        g dg          }t          j        dgg          }dgdz  }t          ||||||| j        | j                  }t          |dd            d S )!N)	r8   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   r{   r   ghb$[@r  r3   r.   r  r   s           r   test_bug_7237z LinprogCommonTests.test_bug_7237  s   
 H11122xEEE???BBBBBBEEEAAA888888888888888888888888000000000000000000000000-  0 x 8 8 8 9 9 x===>??x"!#atT4![$,@ @ @$??????r   c                    t          j        g dg dg dg dg          }t          j        |j        d                   }t          j        |j        d                    }dg|j        d         z  }t                      5 }|                    t          d           |                    t                     t          |||t          t          || j        | j        	          }d d d            n# 1 swxY w Y   | j                            d
d          dk     r| j        dk    rt          |           d S t!          |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'  )r;   rE   r@   rI   r   r   r'  rM  r   r
   rp   rq   r   r   rC  r(   r6   )r   rn   ro   rU   rt   r(  r   s          r   test_bug_8174z LinprogCommonTests.test_bug_8174  s    x000000%%%%%%	' ( (
 x
1&&WTZ]###DJqM)   	DCJJ~'BCCCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D <E4((500T[I5M5M5c:::::C-@tLLLLLLs   ?A!C,,C03C0c                 T   t          j        g d          }t          j        d           }t          j        dgdgdgdgdgdgdgg          }t          j        g dg dg dg dg dg          }t          j        d	gd
gd
gd
gd
gg          }t                      5 }t          r|                    t                     |                    t          d           t          |||||t          | j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r   r   r   r   r~   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r8   )r  r   r   r   r   r   gUUUUUU)r   r  r   r   r   r   )r   r   r  r   r   r   r2  r   r   r  r   g?E@r   )r;   rE   identityr   r  r'  r   r   r
   rt   r   r   r6   r   rU   rn   ro   rp   rq   r(  r   s           r   test_bug_8174_2z"LinprogCommonTests.test_bug_8174_2  s    H***++Ax"tbTB4"tbTBCCx!!!(((&&&((('''
   x#aS1#s344   	DC +

>***JJ(ABBB!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	)9::::::s   A#DDDc                    t          j        g d          }t          j        g dg dg dg dg dg          }t          j        g d          }t          |||| j        | j                  }t          |g d	
           d S )N)r~   r   r         ?r7  )r'         @r7  r         )r   r   r   r4  rh   )r#   r  r'   g      )ry   )r8   g      @r   r9  r   )r8  r   g      r8   g      #@)r   r   r   r   r   )rn   ro   r   r   )r   r   r  gUUUUUU@gUUUUUU#@rd  )r;   rE   r
   r   r   r6   r^  s        r   test_bug_8561z LinprogCommonTests.test_bug_8561  s    
 H)))**x$$$######"""###% & & x((adt|![* * *'='='=>>>>>>r   c                    g d}g dg dg dg dg}g d}g d}d}t                      5 }t          r|                    t                     |                    t          d	           |                    t
                     t          |||t          t          || j	        | j
        
          }d d d            n# 1 swxY w Y   |                    g d           |                    d           d|d<   t                      5 }t          r|                    t                     |                    t          d	           |                    t
                     t          |||t          t          || j	        | j
        
          }d d d            n# 1 swxY w Y   d}	t          |||	           t          |||	           d S )N)r}   re   rz   r#   )rw   r   r   rz   )r   rw   r'   rx   )r   r'   rw   r   )r#   r|   r|   r}   )r{   r<  r   )r   r   r   r   g      B@r  r   )r   r   r8   r   r   r   r   r   )r3   r-   )r   r  r'  r   rM  r   r
   rp   rq   r   r   rC   r6   )
r   rU   rn   ro   rt   r3   r(  res1res2r-   s
             r   test_bug_8662z LinprogCommonTests.test_bug_8662   sj    OO   " ===#   	EC +

>***JJ~'BCCCJJ}%%%1dD$f"&+t|E E ED	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	MMM"""A q	   	EC +

>***JJ~'BCCCJJ}%%%1dD$f"&+t|E E ED	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E +DAAAA+DAAAAAAs%   BB99B= B=BFFFc           
          ddg}ddgg}dg}ddg}t          |t          t          |||| j        | j                  }t          |dd	gd
           d S )Nr   r#  r   ry   rx   r   r   r   g۶m۶m?gI$I$@rZ  )r
   rn   ro   r   r   r6   rh  s         r   test_bug_8663z LinprogCommonTests.test_bug_8663$  st     FByt\*atT4![$,@ @ @4yfEEEEEEr   c                 X   dg}dgdgg}ddg}dgdgdgg}g d}t                      5 }|                    t                     |                    t          d           t	          |||||t
          | j        | j        	          }d d d            n# 1 swxY w Y   t          |           d S )
Nr'   r   r#  r   r   r{   r#   r   re   r  r   )	r   r'  rM  r   r
   rt   r   r   r!   r4  s           r   test_bug_8664z LinprogCommonTests.test_bug_8664/  s    CaSz1vbTA3zz   	DCJJ~&&&JJ(GHHH!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 	3s   ABBBc           
      L   t          j        g d          }t          j        g dg dg          }t          j        ddg          }g d}t          |||t          t          || j        | j                  }t          |d           t          ||j	        z  |j
                   d	S )
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r8   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rV  rV  r   r   N)r;   rE   r
   rp   rq   r   r   r6   r   r2   r1   r|  s         r   test_bug_8973z LinprogCommonTests.test_bug_8973?  s     H%%%&&x///:;;xB  MMMatT4![$,@ @ @ 	,,,,QY(((((r   c           
         t          j        d          }t          j        dgg          }t          j        dg          }d}t          |||t          t
          || j        | j                  }t          |dg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   rZ  N)	r;   r@   rE   r
   rp   rq   r   r   r6   r|  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2P  s     HQKKx!x~~atT4![$,@ @ @t;;;;;;r   c           
      `   t          j        d          }t          j        dgg          }t          j        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        |          }t          |ddgd           dS )zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   r   r8   r'   r|   r   rz   r   r   Tr   re   r   rZ  N)
r;   r@   rE   updater   r
   rp   rq   r   r6   r  s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124`  s    
 HQKKx!x~~GQ!Q 1v
+TN	atT4![!5 5 5BxSAAAAAAr   c                    t          j        g dg dg dg dg dg dg          }t          j        g d          }t          j        dd	t          j        d
          fd          }t	                      5 }|                    t          d           t          |t          t          ||t          | j        | j                  }ddd           n# 1 swxY w Y   t          |g 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   )      re         f   r   r   r'   Naxisr  r   )   \   r  rP  r   re   rU  rZ  )r;   rE   concatenater@   r   r'  r   r
   rn   ro   rt   r   r   r6   )r   rp   rq   rU   r(  r   s         r   test_bug_10349z!LinprogCommonTests.test_bug_10349s  s^   
 x++++++++++++++++++- . . x55566NAq"(1++.T:::   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	'@'@'@bQQQQQQs   6ACCCdarwinz0Failing on some local macOS builds, see gh-13846reasonc                    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          sddi}|                    | j                   t	                      5 }|                    t          d           t          r|                    t                     |                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d           t          |t          t          ||t          | j         |          }ddd           n# 1 swxY 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   rJ  r   r   r'  r   r  r   rM  r   r
   rn   ro   rt   r   r1   )r   rU   rp   rq   r  r(  r   s          r   test_bug_10466z!LinprogCommonTests.test_bug_10466  s    NMMDDDDDDDDDEEEDDDDDDDDDDDDDDDDDD	F     
 {%%g.. 	$d#A	   
	9CJJ(GHHH +

>***JJ~'CDDDJJ~'FGGGJJ~'@AAAJJ~'EFFFJJ}&ABBB!T4tV!%a9 9 9C
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 	-----s   1C/E,,E03E0N)W__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   markthread_unsafer  r  r)  r/  r9  rF  rH  rR  rT  rX  r[  r_  rb  re  ri  rn  rp  rr  rt  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  r  r  r  r  r  r#  r(  r0  r5  r:  r?  rA  rD  rF  rH  rK  rW  skipifsysplatformr`  r   r   r   r   r   n  sW        $ $ $8 8 8	. 	. 	.@ @ @) ) )) ) ); ; ; [9 9 9  [2 2 2$O O O8  B' ' '% % %@% % %. [') ') ')R  
% % %F F F
@ 
@ 
@F F F
/ 
/ 
/; ; ;G G G; ; ;G G GG G GN N N               "> > >% % %6, , ,, , ,% % %% % %
% 
% 
%, , ,% % %. . .	  	  	 % % %  # # # A A A(A A A(
L 
L 
L9 9 92     (C C C8 8 8D D D*- - ->	. 	. 	.. . .(B B B"	C 	C 	C  "     # # #"D D D.5> 5> 5>n: : :,*6 *6 *6X> > >$'@ '@ '@RM M M.; ; ;0? ? ?""B "B "BH	F 	F 	F      ) ) )"< < < B B B&R R R& [0!/  1 1&. &.1 1&. &. &.r   r   zignore::DeprecationWarningc                       e Zd ZdZdS )LinprogSimplexTestsr   Nra  rb  rc  r   r   r   r   rk  rk    s        FFFr   rk  c                       e Zd ZdZd ZdS )LinprogIPTestsr   c                 .    t          j        d           d S )Nz*Test is failing, but solver is deprecated.r   skipr   s    r   r`  zLinprogIPTests.test_bug_10466  s    @AAAAAr   N)ra  rb  rc  r   r`  r   r   r   rn  rn    s-        FB B B B Br   rn  c                   $    e Zd ZdZd Zd Zd ZdS )LinprogRSTestsr   c                 .    t          j        d           d S Nz Intermittent failure acceptable.rp  r   s    r   r  zLinprogRSTests.test_bug_5400      677777r   c                 .    t          j        d           d S ru  rp  r   s    r   r?  zLinprogRSTests.test_bug_8662  rv  r   c                 .    t          j        d           d S ru  rp  r   s    r   r  z LinprogRSTests.test_network_flow  rv  r   N)ra  rb  rc  r   r  r?  r  r   r   r   rs  rs    sF        F$8 8 88 8 88 8 8 8 8r   rs  c                   P   e Zd Z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                         Zd Z	ej        
                    d          d             Zd Zd Zej                            d          d             ZdS )LinprogHiGHSTestsc           	          d }t          j        ddg          }ddgddgddgg}g d}t          t          t          ||||| j                   t	          |||| j        	          }t          |d
ddg           d S )Nc                     d S r   r   r    s    r   r   z+LinprogHiGHSTests.test_callback.<locals>.cb  s    4r   r|   r   r   r   r   r   r   r   r   rz   r   )r;   rE   r   NotImplementedErrorr
   r   r6   )r   r   rU   rn   ro   r   s         r   r   zLinprogHiGHSTests.test_callback  s    	 	 	Hb"XAAA'zz)7ADt!$+	7 	7 	7 	7addkBBB1a&AAAAAAr   r   r   r8   r   r;  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                 t      fd}|                      j                   t          t          ||           d S )Nc                 6    t          dj        |            d S )Nr   r   r  )r   r   s    r   r  z7LinprogHiGHSTests.test_invalid_option_values.<locals>.f  s     Adk7;;;;;;r   r  )rJ  r   r   r   )r   r   r  s   `  r   test_invalid_option_valuesz,LinprogHiGHSTests.test_invalid_option_values  sK    	< 	< 	< 	< 	<t|$$$_a999999r   c                     t          d          \  }}}}}d}t          ||||| j        | j                  }t	          |j        dk    | j        dk               d S )Nr'   r   rA  r   r  )rV   r
   r   r   r   crossover_nit)r   rp   rq   rU   r"  rt   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover   sl    *1oodAq!ad#DKO O O 	S&!+T[K-GHHHHHr   re   c           
         
 t          d          \  
t          
 j         j                  }j        \  
 fd}t          |d|j                  }t          |j        j	        |           
 fd}t          |d|j                  }t          |j
        j	        |           
 fd}t          j        d	
          5  t          |d|j                  }d|t          j                   <   d d d            n# 1 swxY w Y   t          |j        j	        |           
 fd}t          j        d	
          5  t          |d|j                  }	d|	t          j                   <   d d d            n# 1 swxY w Y   t          |j        j	        |	           d S )Nr   rk   r  c           	      D    t          | j                  j        S Nr   r
   r   r1   )r2   rp   rn   rq   rt   rU   r   s    r   f_bubz/LinprogHiGHSTests.test_marginals.<locals>.f_bub  s.    1dAtT6"&+/ / //23r   z3-point)r   f0c           	      D    t          | j                  j        S r  r  )r2   rp   rn   ro   rt   rU   r   s    r   f_beqz/LinprogHiGHSTests.test_marginals.<locals>.f_beq  s.    1dD$6"&+/ / //23r   c           	      z    t          j        | g          j        }t          |j                  j        S r  r;   rE   rj   r
   r   r1   )	r2   rt   rp   rn   rq   ro   rU   r   rs   s	     r   f_lbz.LinprogHiGHSTests.test_marginals.<locals>.f_lb"  sD    Xq"g&&(F1dD$f"&+/ / //23r   ignore)invalidc           	      z    t          j        | g          j        }t          |j                  j        S r  r  )	r2   rt   rp   rn   rq   ro   rU   rr   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ub/  sD    Xr1g&&(F1dD$f"&+/ / //23r   )ru   r
   r   r   rj   r   r1   r   r  r  r   r;   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrp   rn   rq   ro   rt   rU   rr   rs   s   `         @@@@@@@@r   test_marginalsz LinprogHiGHSTests.test_marginals  s    -<,C,C,C)4tT6adDt#DKO O OB	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 #5$ySWMMM-v666	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 #5$ySWMMM	+V444	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 [*** 	( 	(%dBySWMMME&'E2;r??"#	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 		+U333	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 [*** 	( 	(%dBySWMMME&'E2;r??"#	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 		+U33333s$   $1D!!D%(D%&1F##F'*F'c           
      (   t          d          \  }}}}}}t          ||||||| j        | j                  }| |j        |j        j        z  z   |j        |j        j        z  z   |j        j        z   |j	        j        z   }t          |dd           d S )Nr  r  r  r   -q=r  )ru   r
   r   r   rj   r  r  r   r  r  r   )	r   rU   rn   ro   rp   rq   rt   r   resids	            r   test_dual_feasibilityz'LinprogHiGHSTests.test_dual_feasibility:  s    ,;,D,D,D)4tT6adDt#DKO O O
 dfs{444#)--.$% $% 	qu------r   c           
          t          d          \  }}}}}}t          ||||||| j        | j                  }t	          j        |j        j        |||j        z  z
  z  d          sJ d S )Nr  r  r  r   )	ru   r
   r   r   r;   allcloser  r  r2   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slacknessH  s    ,;,D,D,D)4tT6adDt#DKO O O {3;0D4#%<4GH!LLLLLLLr   z&Upstream / Wrapper issue, see gh-20589rY  c                    g d}g d}g d}g d}g d}g d}t          j        |t           j                  }t          j        |t           j                  }t          j        |t           j                  }	t          j                            |||	ffd	          }
t          j        |t           j                  }t          j        |t           j                  }t          j                            |d
d
|
||          }|j	        dk    sJ |j
        }t           j                            |
|z  |z
            }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#  rz   rz   r~   r~   rw   rw   r{   r{   re   r  r  r  r  r  r     r  rz  rz  rz  rz  rB  rB  r  r  r  r     r  r  r  r  r  r  r  rf   rf   rf   rf      r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )SrB  rz  r  r  r  r  r  rf   r  r  r  r  r  r  r  r  r  r  r  r   r       r#   rz  r  r'   r   r'   r   r  r  r   r  r   r  r  rB  r#  r'   r#  r'   r  r  rz   r#  rz   r#  rf   r  r~   rz   r~   rz   r  r  rw   r~   rw   r~   r  r  r{   rw   r{   rw   r  r  re   r{   re   r{   r  r  r  re   r  re   r  r  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  r9   )r  r  )rI   N)rn   ro   rp   rq   rt   r   )r;   asarrayrv  int32r   r   	csr_arrayoptimizer
   r   r2   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_eqrq   rU   resultr2   n_r_xn_rs                    r   test_bug_20336z LinprogHiGHSTests.test_bug_20336S  s   
	# 	# 	#
9 9 9
N N N

3 3 3
? ? ?	T T T 
:RZ@@@
:RX>>>Zrx888
|%%}mZ5P&Q,4 & 6 6z)2:666J|2:666''4dQU/9 ( ; ;}aH	tax$//innV\233U#####r   N)ra  rb  rc  r   r   re  rf  parametrizer  r  	fail_slowr  r  r  r  r  r   r   r   rz  rz    sA       
B 
B 
B [[Y("o%rl)2.+R0;R@=rB92>BFK 	! 	!: :	! 	! :I I I [2/4 /4 /4b. . .	M 	M 	M [FGGA$ A$ HGA$ A$ A$r   rz  c                   T     e Zd Zd Zd Zd Zej        j         fd            Z	 xZ
S )TestLinprogSimplexDefaultc                     i | _         d S r   r  r   s    r   setup_methodz&TestLinprogSimplexDefault.setup_method  s    r   c                 .    t          j        d           d S NzSimplex fails on this problem.rp  r   s    r   r  z'TestLinprogSimplexDefault.test_bug_5400      455555r   c                 .    t          j        d           d S r  rp  r   s    r   test_bug_7237_low_tolz/TestLinprogSimplexDefault.test_bug_7237_low_tol  s     	455555r   c                     | j                             ddi           t          j        t                    5  t                                                       d d d            d S # 1 swxY w Y   d S Nr.  r  r   rJ  r   r   r   superr0  r   	__class__s    r   test_bug_8174_low_tolz/TestLinprogSimplexDefault.test_bug_8174_low_tol       	UEN+++\/** 	$ 	$GG!!###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   !A%%A),A))ra  rb  rc  r  r  r  r   re  rf  r  __classcell__r  s   @r   r  r    sw          6 6 66 6 6
 [$ $ $ $ $ $ $ $ $r   r  c                   N     e Zd Zd Zd Zej        j         fd            Z xZ	S )TestLinprogSimplexBlandc                     ddi| _         d S )Nr  Tr  r   s    r   r  z$TestLinprogSimplexBland.setup_method  s    r   c                 .    t          j        d           d S r  rp  r   s    r   r  z%TestLinprogSimplexBland.test_bug_5400  r  r   c                 F   | j                             ddi           t          j        t                    5  t          j        t                    5  t                                                       d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r  )	r   rJ  r   r	   r0   r   r   r  r0  r  s    r   r  z-TestLinprogSimplexBland.test_bug_8174_low_tol  s    	UEN+++]>** 	( 	(o.. ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s5   B!A>2B>B	BB	BBB)
ra  rb  rc  r  r  r   re  rf  r  r  r  s   @r   r  r    sh        ' ' '6 6 6 [( ( ( ( ( ( ( ( (r   r  c                       e Zd Zd Z ej        d          j        dk     Zej	        
                    d          Zej                            eoed           fd            Z fdZd	 Zej        j         fd
            Zd Zd Z xZS )TestLinprogSimplexNoPresolvec                     ddi| _         d S )Nr;  Fr  r   s    r   r  z)TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rw   linuxz"Fails with warning on 32-bit linux)	conditionrZ  c                 H    t                                                       d S r   )r  r  r  s    r   r  z*TestLinprogSimplexNoPresolve.test_bug_5400  s!     	r   c                     | j                             ddi           t          j        t          d          5  t                                                      cd d d            S # 1 swxY w Y   d S )Nr.  r  zlinprog status 4r   )r   rJ  r   r	   r0   r  r  r  s    r   test_bug_6139_low_tolz2TestLinprogSimplexNoPresolve.test_bug_6139_low_tol  s    
 	UEN+++]>1CDDD 	+ 	+77((**	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s    A&&A*-A*c                 .    t          j        d           d S r  rp  r   s    r   r  z2TestLinprogSimplexNoPresolve.test_bug_7237_low_tol  r  r   c                     | j                             ddi           t          j        t                    5  t                                                       d d d            d S # 1 swxY w Y   d S r  r  r  s    r   r  z2TestLinprogSimplexNoPresolve.test_bug_8174_low_tol  r  r  c                 .    t          j        d           d S Nz#Tests behavior specific to presolverp  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:::::r   c                 .    t          j        d           d S r  rp  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r  r   )ra  rb  rc  r  r;   intpitemsize	is_32_bitrh  ri  r   is_linuxr   re  r  r  r  r  rf  r  r  r  r  r  s   @r   r  r    s       + + + 

#a'I|&&w//H[(3  5 5       5 5 + + + + +6 6 6 [$ $ $ $ $; ; ;; ; ; ; ; ; ;r   r  c                   |     e Zd ZddiZej                            ej        dk    d           fd            Z	 xZ
S )TestLinprogIPDenser   FrX  z:Fails on some macOS builds for reason not relevant to testrY  c                 H    t                                                       d S r   r  r  r  s    r   r  z TestLinprogIPDense.test_bug_6139  s!    
 	r   )ra  rb  rc  r   r   re  rg  rh  ri  r  r  r  s   @r   r  r    su        G [ K          	          r   r  c                       e Zd ZdddZdS )TestLinprogIPSparseCholmodTr   r   Nra  rb  rc  r   r   r   r   r  r    s        !t44r   r  c                       e Zd ZdddZd ZdS )TestLinprogIPSparseUmfpackTFr  c                 .    t          j        d           d S )Nz2Failing due to numerical issues on some platforms.rp  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KLMMMMMr   N)ra  rb  rc  r   r  r   r   r   r  r    s5        !u55	N 	N 	N 	N 	Nr   r  c                       e Zd ZddddZej                            ej        dk    d          ej        	                    d           fd                        Z
ej                            d	           fd
            Zd Zd Z xZS )TestLinprogIPSparseTFr   r   sym_posrX  /Fails on macOS x86 Accelerate builds (gh-20510)rY  rThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                 H    t                                                       d S r   r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6139  !     	r   Fails with ATLAS, see gh-7877c                 H    t                                                       d S r   r  r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6690  !     	r   c                     t          d          \  }}}}}d}t                      5 }t          r|                    t                     |                    t
          d           |                    t          d            fd j        D             }d|d<   t          |t          t          ||| j        |          }d d d            n# 1 swxY w Y   t          |d	
           d S )Nr#   r   zMatrix is exactly singularr  c                 ,    i | ]}|j         |         S r   r  r  s     r   r  zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>(  "    @@@Cdl3'@@@r   Fr;  r   r   r   )rV   r   r  r'  r   r   r   r   r
   rn   ro   r   r6   )	r   rp   rq   rU   r"  rt   r(  r  r   s	   `        r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve  s'   *1oodAq!   
	9C +

>***JJ(*FGGGJJ(GHHH@@@@4<@@@A!AjM!T4tV!%a9 9 9C
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 	555555s   BC		CCc                     t          d          \  }}}}}t                      5 }|                    t          d           |                    t          d            fd j        D             }d}|D ]C}||d<   t          |t          t          ||t           j	        |          }	t          |	d	           D	 d d d            d S # 1 swxY w Y   d S )
Nr#   r  zInvalid permc_spec optionc                 ,    i | ]}|j         |         S r   r  r  s     r   r  zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>5  r  r   )NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r   r   )rV   r   r'  r   r   r
   rn   ro   rt   r   r6   )
r   rp   rq   rU   r"  r(  r  permc_specsr  r   s
   `         r   test_sparse_solve_optionsz-TestLinprogIPSparse.test_sparse_solve_options/  s.   *1oodAq!   	>CJJ(ABBBJJ(CDDD@@@@4<@@@A7K * > >
",,atT4%)[!= = ======	>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   BCC	C	)ra  rb  rc  r   r   re  rg  rh  ri  xfail_on_32bitr  r  r  r  r  r  r  s   @r   r  r    s        5UCCG[ @    [ !: ; ;       ; ;	   [=>>        ?> 6 6 6$> > > > > > >r   r  c                       e Zd ZdddZej                            ej        dk    d          ej        	                    d           fd                        Z
d Zej                            d	           fd
            Z xZS )TestLinprogIPSparsePresolveT)r   r%  rX  r  rY  r  c                 H    t                                                       d S r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6139D  r  r   c                 .    t          j        d           d S )Nz6_sparse_presolve=True incompatible with presolve=Falserp  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityN  s    LMMMMMr   r  c                 H    t                                                       d S r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6690Q  r  r   )ra  rb  rc  r   r   re  rg  rh  ri  r   r  r  r  r  r  r  s   @r   r"  r"  A  s        488G[ @    [ !: ; ;       ; ;	  N N N [=>>        ?>         r   r"  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestLinprogIPSpecificr   c                    t           rddd}nt          rddd}ndddd}t          dd          \  }}}t          |||| j        |          }t          |||| j                  }t          |j        |j        dd	d
           d S )NTr  Fr	  rf   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r+   )has_cholmodr  rc   r
   r   r   r1   )r   r   rS   rT   rU   r=  r>  s          r   test_solver_selectz(TestLinprogIPSpecific.test_solver_select]  s     	L!%488GG 	L!%599GG!%5UKKG2r""1aqqqgNNNqqq===$( J"	0 	0 	0 	0 	0 	0r   c                 j    dg}dg}t          ||| j        ddd          }t          |d           d S )Nr8   r  FT)r;  r   rL  r   )r
   r   r6   rW  s       r   )test_unbounded_below_no_presolve_originalz?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originall  sV    D&![+0dCCE E E 	,,,,,,r   c                     t          dd          \  }}}t          |||| j        ddi          }t          |d           d S )Nrf   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_choleskyu  sV    2r""1aaaa)402 2 2777777r   c           
      v   t          dd          \  }}}t                      5 }|                    t          d           |                    t          d           |                    t
          d           t          |||| j        ddd          }d d d            n# 1 swxY w Y   t          |d	           d S )
Nrf   r  r  r_  T)ipr   r   r   r   )	rc   r   r'  rM  r   r   r
   r   r6   )r   rS   rT   rU   r(  r   s         r   test_alternate_initial_pointz2TestLinprogIPSpecific.test_alternate_initial_point|  s    2r""1a   	>CJJ~'CDDDJJ(GHHHJJ}&ABBB!!!DK)-t"<"<> > >C		> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	777777s   A.BB!$B!c                 `   dg}dgdgg}ddg}dgdgdgg}g d}t                      5 }|                    t                     |                    t          d           t	          |||||t
          | j        d	d
i          }d d d            n# 1 swxY w Y   t          |j         d           d S )Nr'   r   r#  r   r   r{   rC  r  r;  Fr   r   )	r   r'  rM  r   r
   rt   r   r   r   r4  s           r   rD  z#TestLinprogIPSpecific.test_bug_8664  s   CaSz1vbTA3zz   	KCJJ~&&&JJ(GHHH!T4tV!%z56IK K KC	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K
 	CK!?@@@@@s   ABBBN)	ra  rb  rc  r   r*  r,  r.  r1  rD  r   r   r   r'  r'  W  si        F0 0 0- - -8 8 8
8 
8 
8A A A A Ar   r'  c                   <    e Zd Zi Zd Zd Zd Zd Zd Zd Z	d Z
dS )	TestLinprogRSCommonc                 .    t          j        d           d S ru  rp  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland  rv  r   c                     t                      \  }}}}}}}t          |||||t          | j        | j        |	  	        }t          |||           t          |j        d           d S Nr   r   x0r   r   r   r
   rt   r   r   r6   r   r   r  s	            r   "test_nontrivial_problem_with_guessz6TestLinprogRSCommon.test_nontrivial_problem_with_guess  w    4F4H4H14tT66atT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          ||||||| j        | j        |	  	        }	t	          |	||           t          |	j        d           d S )N)r   r   r   r   r8  r   r   r   r
   r   r   r6   r   r   
r   rU   rn   ro   rp   rq   r   r   rt   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variables  s    4F4H4H14tT66FFFatT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          ||||||| j        | j        |	  	        }	t	          |	||           t          |	j        d           d S )N)r  r   Nr   r  g333333?r8  r   r   r>  r?  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variables  s    4F4H4H14tT66<<<atT4![$,6K K K6BBBBSWa     r   c                    t                      \  }}}}}}}dg}t          j        g d          }d}g d}t          ||||||| j        | j        |	  	        }	t          |	||           t          |	j        d           d S )Nr'   )gibl3g%G/?r   r  g@Q$@)r   rB  r   rC  r8  r   r   )	r   r;   rE   r
   r   r   r6   r   r   r?  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variable  s    4F4H4H14tT66s66677???atT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          |||||t          | j        | j        |	  	        }	t          |	j        d           d S N)r   r   r#   rh   r8  rz   r   r
   rt   r   r   r   r   
r   rU   rn   ro   rp   rq   r   r   	bad_guessr   s
             r   &test_nontrivial_problem_with_bad_guessz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guess  k    4F4H4H14tT66!MM	atT4![$,9N N NSZ#####r   c                    t          d          \  }}}}}t          j        j        |j         }t                      5 }|                    t          d           |                    t          d           |                    t                     t          |||| j                  }t          |||| j        |j                  }t          ||z   ||| j        |j                  }	d d d            n# 1 swxY w Y   t          |d           t          |j        d           t          |	           t!          |	j        |j        k                d S )	Nr#   r  r  )rp   rq   r   )rp   rq   r   r9  r   r   r   )rV   r;   r<   rH   rI   r   r'  r   rM  r   r
   r   r2   r6   r   r   r   )
r   rS   rT   rU   r"  r  r(  r   r>  res3s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  sw   $Q1aAINAG$   	PCJJ(ABBBJJ~'BCCCJJ}%%%!!!DK@@@C111T[SUKKKD1q5qqOOOD	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	+6666TXq!!!37"#####s   B(C00C47C4N)ra  rb  rc  r   r  r;  r@  rD  rF  rL  rP  r   r   r   r4  r4    s        G8 8 8! ! !! ! !! ! !	! 	! 	!$ $ $$ $ $ $ $r   r4  c                       e Zd ZddiZdS )TestLinprogRSBlandpivotr  Nr  r   r   r   rR  rR    s         GGGr   rR  c                       e Zd ZdZi Zd ZdS )TestLinprogHiGHSSimplexDualr   c                    t                      \  }}}}t          ||||| j        | j                  }t	          |j        d           t          |j        du           t          t          j	        |j
        dk                         t          t          j	        |j        d |D             k                         t          t          j	        |j        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.
        )rn   ro   rt   r   r   r   Ngưc                 4    g | ]\  }}|t           j        n|S r   r;   ri   r	  rr   rs   s      r   
<listcomp>zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>  s6     !5 !5 !5%+R ,.:2 !5 !5 !5r   c                 <    g | ]\  }}|t           j         n|dz
  S )Nr  rX  rY  s      r   rZ  zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>  s<     !5 !5 !5%+R -/J"&BI !5 !5 !5r   )r   r
   r   r   r   r   r   r2   r;   allr   )r   rU   rn   ro   r   r   s         r   test_lad_regressionz/TestLinprogHiGHSSimplexDual.test_lad_regression  s    1224tadd![$,@ @ @SZ###T!"""sy5())***su !5 !5/3!5 !5 !5 5 6 6 	7 	7 	7su !5 !5/3!5 !5 !5 5 6 6 	7 	7 	7 	7 	7r   N)ra  rb  rc  r   r   r]  r   r   r   rU  rU    s-        FG7 7 7 7 7r   rU  c                       e Zd ZdZi ZdS )TestLinprogHiGHSIPMr  N)ra  rb  rc  r   r   r   r   r   r_  r_   	  s        FGGGr   r_  c                   R   e Zd ZdZi Zej                            d          ej                            e	j
        dk     o ej                    dk    dd          d                         Zd	 Zd
 Zd Zd Zej        j        d             Zej        j        d             Zd Zd ZdS )TestLinprogHiGHSMIPr   re   l        LinuxFzgh-16347)r  runrZ  c           	         d}t          |          \  }}}}}dgt          |          z  }dgt          |          z  }t          |dz  |||| j        |          }	|                                |	j        z                      |dz  ||          }
t          j        |
d          }t          j	        
                    |                    d          |           t          j	        
                    |                    d          |           t          j	        
                    t          j        |                                          |           t          j	        
                    t          j        |d d d d df                                                   |           t          j	        
                    |	j        t          j        |	j                  d	
           d S )Nr'   r   r   r   rU   rp   rq   rt   r   r   r   rR  r8   r  r  )rV   r   r
   r   rD   r2   r?   r;   rm  r  r   diaground)r   rJ   rS   rT   rU   rM   rL   rt   r   r   ssquares               r   	test_mip1zTestLinprogHiGHSMIP.test_mip1	  s    *1oo1a!CFF"cCFFl!!!F![kC C C __&//1a;;"""

""6::1:#5#5q999

""6::1:#5#5q999

""276??#6#6#8#8!<<<

""276!!!TTrT'?#;#;#?#?#A#A1EEE

""35"(35//"FFFFFr   c                    t          j        ddgddgg          }t          j        ddg          }t          j        ddg           }t          j        dt           j        fgt          |          z            }t          j        |          }t          ||||| j        |	          }t           j                            |j	        ddg           t           j                            |j
        d
           d S )Nr   r   r   re   r8   r  r   r   r  r|   )r;   rE   ri   r   	ones_liker
   r   r  r   r2   r1   r  s          r   	test_mip2zTestLinprogHiGHSMIP.test_mip2(	  s     x!R2r(+,,xR!!Xq!fArv;-#a&&011l1oo4![kC C C 	
""351a&111

""37B/////r   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t	          ||||| j        |          }t           j                            |j        d           t          j	        |j
        ddg          st          j	        |j
        ddg          sJ d S d S )	Nr8   r   r#   r   r  r   r  r   )r;   rE   ri   r   r
   r   r  r   r1   r  r2   r  s          r   	test_mip3zTestLinprogHiGHSMIP.test_mip3;	  s     x"a1a&1a&122x$$Xq!fbf+Q'cCFFl4![kC C C 	
""37B///{351a&))GR[A-G-GGGGGGGGr   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg          }dt           j        fgt          |          z  }ddg}t	          ||||| j        |	          }t           j                            |j        d
dg           t           j                            |j	        d           d S )Nr8   r   r   r   r   )rz  irf   rw   r   r  g      @r~   ;   )
r;   rE   ri   r   r
   r   r  r   r2   r1   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4L	  s     x"bB8aV455x&&HaVbf+Q'!f4![kC C C 	
""353(333

""37B/////r   c           
         t          j        g dg          }t          j        dg          }t          j        g dg          }t          j        dg          }t          j        g d          }dt           j        fdt           j        fdg}g d}t          ||||||| j        |	          }t           j                            |j        g d
           t           j                            |j        d           |	                    dd           J |	                    dd           J |	                    dd           J d S )Nr  r~   )r'   r   r   r  )r|   r   r8   r   r   r>  )rU   rn   ro   rp   rq   rt   r   r   )r   rz   r   imip_node_countmip_dual_boundmip_gap)
r;   rE   ri   r
   r   r  r   r2   r1   rC  )	r   rn   ro   rp   rq   rU   rt   r   r   s	            r   	test_mip5zTestLinprogHiGHSMIP.test_mip5\	  s:    x$$x}}x$$x~~H\\\""bf+26{F3ii4d#DK"-/ / / 	
""35)))444

""37C000 ww'..:::ww'..:::wwy$''33333r   c                 L   t          j        g dg dg dg dg          }t          j        g d          }t          j        g d          }dt           j        fgdz  }d	gdz  }t          ||||| j        |
          }t           j                            |j        d           d S )Nr  r  r  r  r  r#   rz  r  '   r  r  r  r  r  r  r  r  rz  r  r  r  &   r  r  )   r  r  r  r  r}  r  r  i  i(  i:,  i/  r   re   r  r  r~   r#  r~   r#   r   rw   r   re  i>  )r;   rE   ri   r
   r   r  r   r1   )r   rp   rq   rU   rt   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip6t	  s     x888999999999; < < x33344H00011bf+qc!e4![kC C C 	
""37D11111r   c                 4   t          j        g dg dg dg dg          }t          j        g d          }t          j        g d          }dt           j        fgdz  }d	gdz  }g d
}g }|D ]P}t          |t          t
          |||| j        |d|i	  	        }	|	d         }
|
|k    sJ |                    |
           Qt          j        t          j	        |                    }t          j
        |dk              sJ t          j
        |dk              rJ d S )Nry  rz  r|  r~  r  r  r   rw   r   )rh   g      ?g{Gz?r  mip_rel_gap)	rU   rn   ro   rp   rq   rt   r   r   r   rv  )r;   rE   ri   r
   rn   ro   r   rC   diffflipr\  )r   rp   rq   rU   rt   r   mip_rel_gapssol_mip_gapsr  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdown	  sd   
 x888999999999; < < x33344H00011bf+qc!e///' 		/ 		/KADt$T!'&1#0+">@ @ @C  	NM !K////.... GBGL1122	vi1n%%%%%6)q.)))))))r   c                 ,   t          j        g d          }t          j        ddgddgddgddgg          }t          j        g d          }t          |||d          }t           j                            |j        g d           |j        dk    sJ d S )	N)r   r   r8   r8   rh   r7  )r   r#   r   r#   r   )rt   r   r   )r   r   r7  r   r   )r;   rE   r
   r  r   r2   r   )r   rU   rt   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuous	  s    
 H%%%&&C:SzC:SzJKKh|||,,a"-g? ? ? 	
""35...999zQr   c           	      $   ddg}ddgg}dg}t          |||ddg          }t          |||t          j        ddg                    }t          |||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   r8   r   r   r   N)r
   r;   r  r   r2   )r   rU   rn   ro   r=  r>  rO  s          r   test_bug_20584z"TestLinprogHiGHSMIP.test_bug_20584	  s    
 FQyvqt$QFCCCqt$BJ1v<N<NOOOqt$DAAATVTV$$$TVTV$$$$$r   N)ra  rb  rc  r   r   r   re  r  r  rh  maxsizeri  systemrj  rm  ro  rr  rw  xslowr  r  r  r  r   r   r   ra  ra  
	  s5       FG[2[#+"7 #4&x((G3 (  * *G G	* * 
G*0 0 0&H H H"0 0 0 4 4 40 [2 2 2$ [#* #* #*J  % % % % %r   ra  c                   @    e Zd ZddiZej        Zej        Zej        ZdS )AutoscaleTestsr^  TN)ra  rb  rc  r   r   r  r  r(  r   r   r   r  r  	  s0        D!G&4M&4M&4MMMr   r  c                       e Zd ZdZd ZdS )TestAutoscaleIPr   c                 J    d| j         d<   t                              |           S )Nr/  r.  )r   r  r  r   s    r   r  zTestAutoscaleIP.test_bug_6139	  s"    #U++D111r   N)ra  rb  rc  r   r  r   r   r   r  r  	  s(        F2 2 2 2 2r   r  c                       e Zd ZdZdS )TestAutoscaleSimplexr   Nrl  r   r   r   r  r  	  s        FFFr   r  c                       e Zd ZdZd Zd ZdS )TestAutoscaleRSr   c                     t                      \  }}}}}}}t          |||||t          | j        | j        |	  	        }t          |||           t          |j        d           d S r7  r:  r  s	            r   r;  z2TestAutoscaleRS.test_nontrivial_problem_with_guess	  r<  r   c                     t                      \  }}}}}}}g d}t          |||||t          | j        | j        |	  	        }	t          |	j        d           d S rH  rI  rJ  s
             r   rL  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess	  rM  r   N)ra  rb  rc  r   r;  rL  r   r   r   r  r  	  s7        F! ! !$ $ $ $ $r   r  c                   \    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)ra  rb  rc  r   r   LCTr  test_RR_infeasibilityrW  r#  r  	test_NFLCr  r   r   r   r  r  	  sD        F
CD'N%M6I1r   r  c                       e Zd ZddiZdS )	TestRRSVDr   SVDNr  r   r   r   r  r  
  s        E"GGGr   r  c                       e Zd ZddiZdS )TestRRPivotr   rS  Nr  r   r   r   r  r  
  s        G$GGGr   r  c                       e Zd ZddiZdS )TestRRIDr   IDNr  r   r   r   r  r  
  s        D!GGGr   r  )NNr)   r)   )r   )r   rw   r{   r   )Xrd  rh  ri  numpyr;   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(   r6   rV   rc   ru   r   r   r   re  rf  r   r   r   r   r   rn   ro   rp   rq   rt   r   filterwarningsrk  rn  rs  rz  r  r  r  r  r  r  r  r"  r'  r4  rR  rU  r_  ra  r  r  r  r  r  r  r  r  r   r   r   <module>r     sv    


     O O O O O O O O O O O O O O O O * * * * * * 3 3 3 3 3 3 3 3 5 5 5 5 5 5 1 1 1 1 1 1 & & & & & & 6 6 6 6 6 6     .......   KKK OOO4444444   KKKL L LF F FE E EK K K 6:$(. . . .(? ? ?D  6- - - - 5 5 5       F4 4 4> 9 9 9> > > % % %*# *# *#ZE E E 	A. A. A. A. A. A. A. A.R* 899    ,   :9 899B B B B B' B B :9B 8998 8 8 8 8' 8 8 :98:s$ s$ s$ s$ s$* s$ s$ s$v$ $ $ $ $ 3 $ $ $,( ( ( ( (1 ( ( ($&; &; &; &; &;#6 &; &; &;\	  	  	  	  	  	  	  	   55 5 5 5 5^ 5 5 5  NN N N N N^ N N N3> 3> 3> 3> 3>. 3> 3> 3>l         .      , 899<A <A <A <A <A <A <A :9<AH<$ <$ <$ <$ <$. <$ <$ <$~! ! ! ! ! ! ! !7 7 7 7 7"3 7 7 78    +   ~% ~% ~% ~% ~% ~% ~% ~%L 8995 5 5 5 5 5 5 :952 2 2 2 2n 2 2 2    >   $ $ $ $ $n $ $ $. 8992 2 2 2 2 2 2 :92# # # # # # # #% % % % %' % % %" " " " "w " " " " "s$   A A! A!'
A2 2A<;A<