
    (ph                       S r SSKrSSKrSSKrSSKJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SSKrSSKrS
r SSKJr  S
r  SSK!r!SSK"J#r$  S r%S r&S r'S r(  SUS jr)S r*S r+SVS jr,S r-SWS jr.S r/\R`                  Rb                  S 5       r2S r3\R`                  Rb                  S 5       r4S r5S r6Sr7Sr8Sr9Sr:Sr; " S S5      r<\R`                  R{                  S 5       " S! S"\<5      5       r>\R`                  R{                  S 5       " S# S$\<5      5       r?\R`                  R{                  S 5       " S% S&\<5      5       r@ " S' S(\<5      rA " S) S*\>5      rB " S+ S,\>5      rC " S- S.\>5      rD " S/ S0\?5      rE\ (       a   " S1 S2\?5      rF\(       a   " S3 S4\?5      rG " S5 S6\?5      rH " S7 S8\?5      rI\R`                  R{                  S 5       " S9 S:5      5       rJ " S; S<\@5      rK " S= S>\@5      rL " S? S@\A5      rM " SA SB\A5      rN " SC SD5      rO\R`                  R{                  S 5       " SE SF5      5       rP " SG SH\P5      rQ " SI SJ\P5      rR " SK SL\P5      rS\R`                  R{                  S 5       " SM SN5      5       rT " SO SP\T5      rU " SQ SR\T5      rV " SS ST\T5      rWg! \ a    Sr GNsf = f! \ a    Sr  GNuf = f)Xz"
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                     [        U R                  (       + S5        [        U R                  U:  S5        [        U R                  SS5        g )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiters     T/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   !   s8    O;<CKK'!#NOQ JK    c                 h    [        U R                  (       + S5        [        U R                  SS5        g )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler!   '   s$    O;<Q DEr   c                 h    [        U R                  (       + S5        [        U R                  SS5        g )Nr      z!failed to report unbounded statusr   r    s    r   _assert_unboundedr$   -   s$    O;<Q CDr   c                 l    [        U R                  (       + S5        [        U R                  S;   S5        g )Nr   r      z%failed to report optimization failure)r   r   r   r    s    r   )_assert_unable_to_find_basic_feasible_solr(   3   s)     O;<CJJ& "IJr   c                    U R                   (       d'  SU R                   SU R                   3n[        U5      e[	        U R                  S5        Ub  [        U R                  USX4S9  Ub  [        U R                  USX4S9  g g )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_successr5   =   s}    
 ;;

|;s{{mDS!!Q L!	. y E!	. r   c           	         [         R                  R                  S5      nX S-  S-   -  S-  n[         R                  " U S-  5      U S-  -  S-   nUR	                  U S-  X 5      n[         R
                  " U S-  X 45      n/ n/ n[        U S-  5       HN  nUR                  5       nSXSS2SS24'   UR                  UR                  5       5        UR                  S5        MP     [        U 5       H^  n[        U 5       HL  n	UR                  5       nSUSS2Xy4'   UR                  UR                  5       5        UR                  S5        MN     M`     [        U 5       HY  nUR                  5       nUSS2USS24   USS2USS24'   UR                  UR                  5       5        UR                  U5        M[     [        U 5       HY  nUR                  5       nUSS2SS2U4   USS2SS2U4'   UR                  UR                  5       5        UR                  U5        M[     UR                  5       nUSS2[        U 5      [        U 5      4   USS2[        U 5      [        U 5      4'   UR                  UR                  5       5        UR                  U5        UR                  5       nUSS2[        U 5      [        SU * S-
  S5      4   USS2[        U 5      [        SU * S-
  S5      4'   UR                  UR                  5       5        UR                  U5        [         R                  " [         R                  " U5      [        S9n
[         R                  " U[        S9nUR                  U
R                  S   5      nXXU4$ )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_squarerU   Q   s    ))


"C	TAXAii1oA%)GooadA)GHHadA\"EFF 1a4[

Agemmo&a	  1XqAJJLEE!Q'NMM%--/*MM!	   1X

 Aq)aAgemmo&a	  1X

 Aq)aAgemmo&a	  JJLE#*1eAha+@#AE!U1XuQx
 
MM%--/"
MM!JJLE58U2rAvr223 
!U1XuR!a,
,-
MM%--/"
MM!
6"%0A
u%AAQr   c                 <   [         R                  R                  S5      nUR                  X4S9* n[         R                  " X U-  45      n[         R                  " U 5      n[        U 5       H  nUS-   nSXFXa-  Xq-  24'   X-  XV'   M     [         R                  " XU-  45      n[         R                  " U5      n	[        U5       H  nUS-   nSXUSU24'   SX'   M     [         R                  " XH45      n
[         R                  " XY45      nXUR                  5       4$ )zt-> 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?   r@   rE   hstackravel)mrI   rJ   rT   ArowbrowrQ   j1AcolbcolrR   rS   s               r   lpgen_2drb      s   
 ))


"C
//v/
&&A88QAJD88A;D1XU !bf_% 
 88QAJD88A;D1XU1W 
 			4,A
		4,A?r   c                 4   [         R                  R                  U 5      nSu  p#nUR                  U5      S-
  nUR                  X45      S-
  nUR                  U5      S-
  nUR                  X$5      S-
  nUR                  U5      S-
  n	UR                  U5      * n
UR                  U5      n[         R                  * XUR                  5       * :  '   [         R                  XUR                  5       :  '   [         R
                  " X45      R                  nXVXxX4$ )N)
      2         ?)r:   r;   r<   rG   infrE   T)seedrJ   m_eqm_ubrI   rT   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genrt      s    
))


%CMDCA88DS D88D>#D88DS D88D>#D
((1+B	!BFF7BSXXZK&&BCHHJYYx ""FD,,r   c                  V    / SQn / SQ/ SQ/ SQ/ SQ/n/ SQn/ SQ/nS/n/ S	QnS
nXX#XEU4$ )N)r7      r'   )rx      	   )r   r7   r   )rd   rx      )ry   r7   r#   r'   )r{   ry   rw   ry   )r|   r   r   )gk椀?gs?r   gkL?gqY:^@ )rT   rm   rn   ro   rp   x_starf_stars          r   nontrivial_problemr      sI    AD DD4D5FFDf44r   c                    [         R                  R                  U 5      nUR                  SSX4S9nUR	                  U5      nUR                  SSX#4S9nXeU-  -  UR                  SSUS9-   n[         R
                  " X-   5      n	SU	SU& [        R                  R                  SU-  X1-   45      n
Sn[        U5       HD  nXWSS2U4   -  XSU24'   SXX-   4'   SU-  USS2U4   -  XS-   SU24'   SXS-   X-   4'   US-  nMF     U
R                  5       n
[         R                  " SU-  5      nXSSS2'   U* USSS2'   S/U-  S	/U-  -   nXX4$ )
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   rW   h㈵>Nr   r7   NNr   N)r:   r;   r<   normalrandnonesscipysparse
lil_matrixr@   tocscr?   )rj   r\   drI   rJ   phiw_truer1   yrT   rm   idxiirn   bndss                  r   l1_regression_probr      s    ))


%C
**Q*
'CYYq\F

1aqf
%A'SZZ4aZ88A 	AAbqE<<""AaC:.D
CAh2h"1"W!$YS&1QU8+UBQBYUAD[q  ::<D88AaC=DAJDAJ>!yk!m+DDr   c                 8  ^ 0 mU4S jn[         R                  " SS/5      nSS/SS/SS//n/ SQn[        X#XAU R                  S9n[	        US	SS
/S9  [        TS   US   5        [        TS   US   5        [        TS   US   5        [        TS   US   5        g )Nc                   > U R                  S5      nU R                  S5      n[        U R                  S5      S;   5        [        U R                  S5      [        S5      ;   5        [        [        U R                  S5      [        5      5        [        [        U[
        5      5        [        [        U[        5      5        U S   TS'   U S	   TS	'   U S
   TS
'   U S   TS'   g )Nr.   completephaser   r   r   r'   nitr1   r0   slackcon)popr   r@   
isinstanceintboolstr)r   r.   r   last_cbs      r   cb!generic_callback_test.<locals>.cb   s    '')$77:& F*+!U1X-.
3775>3/0
8T*+
7C()3xUw<Ur   r{   r   r   r   rd   rv   r'   rm   rn   callbackmethod      2ry   r2   r3   r0   r1   r   r   )r:   rD   r
   r   r5   r   )selfr   rT   rm   rn   r   r   s         @r   generic_callback_testr      s    G$ 	"bAFQFQF#DD
!Tt{{
KCCUq!f=GENCJ/GCL#c(+GENCJ/GG$c'l3r   c            	      *   [         R                  " SS/5      n SS/SS/SS//n/ SQn[        [        [        XUSS9  [        [        [        XUS	S9  S
n[
        R                  " [        US9   [	        XUSS0S9  S S S 5        g ! , (       d  f       g = f)Nr{   r   r   r   r   r   ekki-ekki-ekkirm   rn   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrm   rn   options)r:   rD   assert_raises
ValueErrorr
   pytestwarnsr   )rT   rm   rn   r.   s       r    test_unknown_solvers_and_optionsr     s    
"bAFQFQF#DD*gT2BD*gT,@NG	oW	54$&67	9 
6	5	5s   -B
Bc                      [         R                  " SS/5      n SS/SS/SS//n/ SQn[        XUSS9n[        US	SS
/S9  g )Nr{   r   r   r   r   r   highsr   r   ry   r   )r:   rD   r
   r5   )rT   rm   rn   r   s       r   test_choose_solverr     sO    
"bAFQFQF#DD
!4
0CCUq!f=r   c                  x   [         R                  " [        5         [        SSS9  S S S 5        [         R                  " [        5         [        SSS9  S S S 5        [         R                  " [        5         [        SSS9  S S S 5        g ! , (       d  f       Ni= f! , (       d  f       NM= f! , (       d  f       g = f)Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr
   r   r   r   test_deprecationr   (  sr    	(	)*+ 
*	(	)+, 
*	(	))$ 
*	)	 
*	)	)	)	)	)s#   B	B5B+	
B
B(+
B9c            
         [        SSS9n SnU R                  S:X  d   eU R                  R                  U5      (       d   e[	        S5      u  p#pEnS/[        U5      -  nS/[        U5      -  nSS	0n	[        XBX7SXS
9n SnU R                  S:X  d   eU R                  R                  U5      (       d   eSS0n	[        XBX7SU	S9n SnU R                  S:X  d   eU R                  R                  U5      (       d   e[        SSSS9n SnU R                  S:X  d   eU R                  R                  U5      (       d   e[        SSS9n SnU R                  S:X  d   eU R                  R                  U5      (       d   eSSKJn
  U
" SS5      u  pSnUS:X  d   eUR                  U5      (       d   eU
" S S 5      u  pSnUS:X  d   eUR                  U5      (       d   eg )Nr   r   r   z6Optimization terminated successfully. (HiGHS Status 7:r   ry   r   r   
time_limit皙?)rT   ro   rp   rs   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rd   highs-dsrT   ro   rp   rs   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r7   )rs   r   z+The problem is infeasible. (HiGHS Status 8:r   r7   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.   
startswithrU   lenscipy.optimize._linprog_highsr   )r   r4   rR   rS   rT   rL   rK   rs   r   r   r   r   r.   s                r   test_highs_status_messager   2  s   
!G
$C
BC::??;;!!#&&&&&q/A!aXAF#A,KS!G
AAW!<C
1C::??;;!!#&&&&"oG
AAZ!#C
6C::??;;!!#&&&&
!GG
4C
7C::??;;!!#&&&&
"W
%C
7C::??;;!!#&&&&L4RBOF
GCQ;;c""""4T4@OF
JCQ;;c""""r   c                  ,    [        SS/SS//S/SS/S9  g )Nr   r7   r         rm   rn   r   )r
   r   r   r   test_bug_17380r   _  s     QF2q'$aVDr   c                      \ rS rSrSrS rS rS rS rS r	S r
S	 r\R                  R                  S
 5       r\R                  R                  S 5       rS rS rS rS rS r\R                  R                  S 5       rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S  r%S! r&S" r'S# r(S$ r)S% r*S& r+S' r,S( r-S) r.S* r/S+ r0S, r1S- r2S. r3S/ r4S0 r5S1 r6S2 r7S3 r8S4 r9S5 r:S6 r;S7 r<S8 r=S9 r>S: r?S; r@S< rAS= rBS> rCS? rDS@ rESA rFSB rGSC rHSD rISE rJSF rKSG rLSH rMSI rNSJ rOSK rPSL rQSM rRSN rS\R                  R                  \UR                  SO:H  SPSQ9SR 5       rWSSrXgT)ULinprogCommonTestsin  ai  
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                     [        U 5        g N)r   r   s    r   test_callback LinprogCommonTests.test_callback{  s
    d#r   c                 d    [        SS5      u  pn[        X1X R                  SS0S9n[        USS9  g )Nre   dispTrm   rn   r   r   T*Pr2   rb   r
   r   r5   r   rR   rS   rT   r   s        r   	test_dispLinprogCommonTests.test_disp~  s5    2r"aaa%tn.7r   c           	          SS/nSS/SS//nSS/nSnSn[        XX4U4U R                  U R                  S	9n[        US
S9  g )Nr7   r'   r{   r   r   ry   r   r{   N)rm   rn   rs   r   r   r   )r
   r   r   r5   )r   rT   rR   rS   	x0_bounds	x1_boundsr   s          r   test_docstring_example)LinprogCommonTests.test_docstring_example  s[    G!Wq!fF 		aaI0F"ll4;;@-r   c           
      j    S/nS//nSn[        [        [        XUU R                  U R                  S9  g )Nr   helloro   rp   r   r   )r   	TypeErrorr
   r   r   )r   rT   ro   rp   s       r   test_type_error"LinprogCommonTests.test_type_error  s8     Cui![[$,,	@r   c                 X   [         R                  " S/5      n[         R                  " S//5      n[         R                  " S/5      nUR                  5       nS[         R                  4n[	        XU[
        [        UU R                  U R                  S9n[        USS/S9  [        X45        g )N      ?      @      r   r   r   r   )r:   rD   rA   rh   r
   ro   rp   r   r   r5   r   )r   rT   rm   	b_ub_origrn   rs   r   s          r   test_aliasing_b_ub%LinprogCommonTests.test_aliasing_b_ub  s     HHcUOxx# HHcUO	~~atT4![[$,,@t<	(r   c                 X   [         R                  " S/5      n[         R                  " S//5      n[         R                  " S/5      nUR                  5       nS[         R                  4n[	        U[
        [        X$UU R                  U R                  S9n[        USS/S9  [        X45        g )Nr   r   r   r   r#   r   )r:   rD   rA   rh   r
   rm   rn   r   r   r5   r   )r   rT   ro   	b_eq_origrp   rs   r   s          r   test_aliasing_b_eq%LinprogCommonTests.test_aliasing_b_eq  s     HHcUOxx# HHcUO	~~atT![[$,,@qc:	(r   c                     S/nS//nS/nS//nS/nSn[        XX4XVU R                  U R                  S9n[        USS/S9  g )Nr   r   g       @)            $@r   r   r   )r
   r   r   r5   r   rT   rm   rn   ro   rp   rs   r   s           r   test_non_ndarray_args(LinprogCommonTests.test_non_ndarray_args  s\     Ewuwuat4![[$,,@qc:r   c           	         ^  [         R                  " SS/5      nSS/SS/SS//n/ SQn  SU 4S jjnT R                   Vs0 s H  oUT R                  U   _M     nnSUS	'   [        [        UXX6S
9  g s  snf )Nr{   r   r   r   r   r   c                 4   > [        XX#XETR                  US9  g Nr   r
   r   )rT   rm   rn   ro   rp   rs   r   r   s          r   f2LinprogCommonTests.test_unknown_options.<locals>.f  s    AT;;9r   *   spamr   )NNNNNN)r:   rD   r   r   r   )r   rT   rm   rn   r  keyos   `      r   test_unknown_options'LinprogCommonTests.test_unknown_options  s    HHb"XAAA',0.2	9
 04||<|$,,s##|<&	_a	9 =s   A2c           
      R   [         R                  " SS/SS/SS//5      n[         R                  " / SQ5      n[         R                  " SS/5      * nS[         R                  4/[        U5      -  nS/[        U5      -  n[         R                  R                  [        5         [        X1X$U R                  US9nS S S 5        [         R                  R                  WR                  SS	/5        [         R                  R                  UR                  S
5        g ! , (       d  f       Ne= f)Nr7   r   r#   r   r      r  r   rT   rm   rn   rs   r   r   ?ffffff@ffffff)r:   rD   rh   r   testingr   r   r
   r   r   r1   r0   r   rm   rn   rT   rs   r   r   s          r   test_integrality_without_highs1LinprogCommonTests.test_integrality_without_highs  s    
 xx"a1a&1a&12xx$XXq!fbff+Q'cCFlZZ$$_5At!%+GC 6 	

""3553*5


""377D1 65s   "D
D&c                   ^  SU 4S jjn[        [        U/ SQSS/S9  [        R                  R	                  5        nUR                  [        S5        [        [        U/ SQ/ SQS9  S S S 5        [        [        U/ SQSS/S9  [        [        US	S
/S	S
//S	S
/S9  [        [        US	S
/S	//S	/S9  [        [        US	S
/S	S
//S	S
/S9  [        [        US	S
/S	//S	/S9  [        [        US	S
/S	/S	S9  ST R                  ;   a  T R                  S   (       a  g [        [        US	S
/[        R                  " S5      S	S9  g ! , (       d  f       N= f)Nc                 H   > [        XX#XETR                  TR                  S9  g r	  r
   r   r   rT   rm   rn   ro   rp   rs   r   s         r   r  1LinprogCommonTests.test_invalid_inputs.<locals>.f      AT;;>r   r   r   r#   r   r#   r'   rs   zCreating an ndarray from ragged)r   r%  )r#   r'      r   r   r   r   )rm   rn   )ro   rp   _sparse_presolve)r   r   r#   )rm   rp   NNNNN)	r   r   r:   r  r   filterr   r   r?   )r   r  sups   `  r   test_invalid_inputs&LinprogCommonTests.test_invalid_inputs  s6   	>
 	j!Y7GHZZ))+sJJ02ST*a;VW , 	j!Y7HI 	j!aVAq6(!QHj!aVA3%qcBj!aVAq6(!QHj!aVA3%qcBj!aV1#A> $,,./0 	j!aV"((92EAN% ,+s   +E  
Ec           
        ^  SU 4S jjn[         R                  R                  S5      nSnSn[        R                  R                  X4S5      nUR                  U5      nUR                  U5      nXbR                  U5      -   nXbR                  U5      -
  n	[         R                  " X45      n
XV-  nT R                  S;   aF  [        [        ST R                   S3S	9   [        XuXT R                  T R                  S
9  S S S 5        g 0 T R                  EnT R                  S;   a  SUS'   [        XuXT R                  US
9nUR                  (       d   eg ! , (       d  f       g = f)Nc                 H   > [        XX#XETR                  TR                  S9  g r	  r   r!  s         r   r  5LinprogCommonTests.test_sparse_constraints.<locals>.f  r#  r   r   d      rg   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r*  )r:   r;   r<   r   r   rG   r   column_stackr   r   r   r
   r   r   )r   r  rJ   r\   rI   ro   x_validrT   rr   rq   rs   rp   r   r   s   `             r   test_sparse_constraints*LinprogCommonTests.test_sparse_constraints  s;   	> ii##A&||  s+))A,IIaLxx{"xx{""*~;;88z8DKK= IN 2N O!T#{{DLLBO O '&G{{00$(!At!%g?C;;;O Os   !E
E!c                     / SQn/ SQ/ SQ/ SQ/n/ SQn[         R                  R                  S5        Sn[        XX0R                  SU0S	9n[        XT5        [        UR                  U5        g )
Nr'   rv   r#   r   r   r   r   r'  r#   r7   r   r   r#         @rv   r   r7   r   rv   rd   r'   r   r   r7         iX  r   r#   r   r   )r:   r;   rj   r
   r   r   r   r   )r   rT   rR   rS   r   r   s         r   test_maxiterLinprogCommonTests.test_maxiter"  sc    ! " 
		qaa('24'5SWWg&r   c           	         U R                   R                  SS5      n[        S/SU R                  U R                   S9n[	        USS5        U(       a  [        UR                  S5        [        / SQ/ SQU R                  U R                   S9n[	        US	/ S
Q5        U(       a  [        UR                  S5        [        SS/SS/U R                  U R                   S9n[	        USSS/5        U(       a  [        UR                  S5        [        / SQ/ SQ/ SQ/SS// SQU R                  U R                   S9n[	        US/ SQ5        U(       a  [        UR                  S5        g g )NpresolveTr   )r   r   rs   r   r   r   r$  ))r'  r'  )r7   r7   )r#   r#   r  )r'  r7   r#   )r   r#   r   )r   r   r   r   r   r   r   r   r   r}   ))r'  )r   rd   )      @rI  ro   rp   rs   r   r      )r   r}   rI  )r   getr
   r   r5   r   r   r   do_presolver   s      r   test_bounds_fixed$LinprogCommonTests.test_bounds_fixed1  s#   
 ll&&z48qc&![[$,,@Q"!$i(B![[$,,@R,!$q!fff%5![[$,,@QA'!$iy)&<Aq6;![[$,,@ 	R-!$ r   c                    U R                   R                  SS5      n[        S/SU R                  U R                   S9n[	        U5        U(       a  [        UR                  S5        [        S/S/U R                  U R                   S9n[	        U5        U(       a  [        UR                  S5        [        / SQ/ SQU R                  U R                   S9n[	        U5        U(       a  [        UR                  S5        g g )	NrD  Tr   r(  rE  r   r$  ))r'  r   r   r%  )r   rL  r
   r   r!   r   r   rM  s      r   test_bounds_infeasible)LinprogCommonTests.test_bounds_infeasibleQ  s    
 ll&&z48qc'$++t||T3!$qc7)DKKV3!$i(@![[$,,@3!$ r   c                   ^  T R                   R                  SS5      nU(       + =(       a    T R                  S:H  n/ SQnS[        R                  [        R                  4S/nS[        R                  * [        R                  * 4S/nU(       a  U 4S jn[
        R                  " [        5         [
        R                  " [        5         U" X4S9  S S S 5        S S S 5        [
        R                  " [        5         [
        R                  " [        5         U" X5S9  S S S 5        S S S 5        g [        X4T R                  T R                   S	9n[        U5        U(       a  [        UR                  S
5        [        X5T R                  T R                   S	9n[        U5        U(       a  [        UR                  S
5        g g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NrD  Tr   r$  r   r%  c                 F   > [        XTR                  TR                  S9nU$ )NrE  r   )rT   rs   r   r   s      r   g6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gz  s"    a%)[[$,,H
r   r&  rT   rs   r   r   r   )r   rL  r   r:   rh   r   r   RuntimeWarningr	   
IndexErrorr
   r!   r   r   )r   rN  simplex_without_presolverT   bounds_1bounds_2rV  r   s   `       r   test_bounds_infeasible_2+LinprogCommonTests.test_bounds_infeasible_2h  s`    ll&&z48'2?#Ot{{i7O RVVRVV,f5bffWrvvg.7#
 n-]]:.a) / . n-]]:.a) / .- A!%dllDCs#SWWa(A!%dllDCs#SWWa(  /. .-
 /. .-sH   .G	F=G:G0GG0=
G	G
G
G-	)G00
G>c                 ^    SS/n[        XR                  U R                  S9n[        U5        g )Nr7   r   r   )r
   r   r   r$   )r   rT   r   s      r   test_empty_constraint_1*LinprogCommonTests.test_empty_constraint_1  s'    HaT\\B#r   c                    / SQnS[         R                  4[         R                  * S4SS/n[        XU R                  U R                  S9n[        U5        U R                  R                  SS5      (       a  [        UR                  S5        g g )N)r7   r   r7   r   r   r7   r   rE  rD  T)	r:   rh   r
   r   r   r$   rL  r   r   r   rT   rs   r   s       r   test_empty_constraint_2*LinprogCommonTests.test_empty_constraint_2  ss    bff+|Wg>a![[$,,@#<<J--!$ .r   c                     / SQnS[         R                  4[         R                  * S4SS/n[        XU R                  U R                  S9n[        U/ SQSS9  g )N)r   r7   r   r7   r   rd  rE  )r   r   r7   r   r   r3   r2   )r:   rh   r
   r   r   r5   re  s       r   test_empty_constraint_3*LinprogCommonTests.test_empty_constraint_3  sM    bff+|Wg>a![[$,,@}"Er   c                     [         R                  " SS/5      S-  nSS/SS/SS//n/ SQn[        XU[        [        [
        U R                  U R                  S9n[        USSS	/S
9  g )Nr#   r   r7   r   r   r   r   iry   r   	r:   rD   r
   ro   rp   rs   r   r   r5   r   rT   rm   rn   r   s        r   test_inequality_constraints.LinprogCommonTests.test_inequality_constraints  sp     HHaVr!AAA atT4![[$,,@A?r   c                     SS/nSS/SS/SS//n/ SQn[        XU[        [        [        U R                  U R
                  S9n[        US	S
S/S9  g )Nry   r#   r   r7   r   r   )r   r7   r7   r   r'  gUUUUUU?gUUUUUU?r   r
   ro   rp   rs   r   r   r5   rn  s        r   test_inequality_constraints2/LinprogCommonTests.test_inequality_constraints2  sb     FARQ atT4![[$,,@uenEr   c                    SS/nSn[        U[        [        [        [        UU R
                  U R                  S9n[        USS/S9  SS/n[        U[        [        [        [        UU R
                  U R                  S9n[        USS/S9  g )Nr   r   r   r   r3   )r
   rm   rn   ro   rp   r   r   r5   re  s       r   test_bounds_simple%LinprogCommonTests.test_bounds_simple  s~    FatT4![[$,,@1v.&!atT4![[$,,@1v.r   c                    [         R                  " S/5      n[         R                  " S//5      n[         R                  " S/5      nSn[        U[        [        X#UU R
                  U R                  S9n[        USS/S9  g )Nr   r   )r   Nr   r#   r   r:   rD   r
   rm   rn   r   r   r5   r   rT   ro   rp   rs   r   s         r   test_bounded_below_only_1,LinprogCommonTests.test_bounded_below_only_1  sg    HHcUOxx# xxatT![[$,,@qc:r   c                 B   [         R                  " S5      n[         R                  " S5      n[         R                  " / SQ5      nS[         R                  4n[        U[        [        X#UU R                  U R                  S9n[        XS[         R                  " U5      S9  g )Nr#   r$  rg   r   ri  r:   r   eyerD   rh   r
   rm   rn   r   r   r5   sumr{  s         r   test_bounded_below_only_2,LinprogCommonTests.test_bounded_below_only_2  sk    GGAJvvayxx	"rvvatT![[$,,@Fr   c                    [         R                  " S/5      n[         R                  " S//5      n[         R                  " S/5      nSn[        U[        [        X#UU R
                  U R                  S9n[        USS/S9  g )Nr   r   )Nr  r   r#   r   rz  r{  s         r   test_bounded_above_only_1,LinprogCommonTests.test_bounded_above_only_1  sg    HHcUOxx# xxatT![[$,,@qc:r   c                 D   [         R                  " S5      n[         R                  " S5      n[         R                  " / SQ5      n[         R                  * S4n[        U[        [        X#UU R                  U R                  S9n[        XS[         R                  " U5      S9  g )Nr#   r$  r'   r   ri  r  r{  s         r   test_bounded_above_only_2,LinprogCommonTests.test_bounded_above_only_2  sm    GGAJvvayxx	"66'1atT![[$,,@Fr   c                 `   [         R                  " S5      n[         R                  " S5      n[         R                  " / SQ5      n[         R                  * [         R                  4n[        U[        [        X#UU R                  U R                  S9n[        XS[         R                  " U5      S9  g )Nr#   r$  r   ri  r  r{  s         r   test_bounds_infinity'LinprogCommonTests.test_bounds_infinity  sr    GGAJvvayxx	"66'266"atT![[$,,@Fr   c                 p   [         R                  " SS/5      S-  n[         R                  " SS/SS//[         R                  S9nSS/n[         R                  * [         R                  4nS[         R                  4nXE4n[	        XU[
        [        UU R                  U R                  S9n[        US	S
S/S9  g )Nr7   r'   r{   r   r   r8   ry   r   gm۶m&g$I$Ig%I$I@r   )
r:   rD   float64rh   r
   ro   rp   r   r   r5   )r   rT   rm   rn   r   r   rs   r   s           r   test_bounds_mixed$LinprogCommonTests.test_bounds_mixed  s     HHb!W"xx"aQ!(*

41vffWbff%	L	'atT4![[$,,@VV<LMr   c                     SS/nSS/SS/SS//n/ SQnSS	/n[        XU[        [        UU R                  U R                  S
9n[        U5        g Nr   r   r}   r   r   r   )   r   r#   r   r   r   r   )r
   ro   rp   r   r   r!   r   rT   rm   rn   rs   r   s         r    test_bounds_equal_but_infeasible3LinprogCommonTests.test_bounds_equal_but_infeasible  s\    GB!Q!R))$atT4![[$,,@3r   c                     SS/nSS/SS/SS//n/ SQnSS	/n[        U[        [        X#UU R                  U R                  S
9n[        U5        g r  )r
   rm   rn   r   r   r!   r{  s         r   !test_bounds_equal_but_infeasible24LinprogCommonTests.test_bounds_equal_but_infeasible2  s\    GB!Q!R))$atT![[$,,@3r   c                     SS/nSS/SS//nSS/nSS/nU R                    Vs0 s H  oUU R                   U   _M     nnS	US
'   [        XU[        [        UU R                  US9n[        U5        g s  snf )Nr   r   g?g@r'   rv   r   r  FrD  r   )r   r
   ro   rp   r   r!   )r   rT   rm   rn   rs   r  r  r   s           r   test_bounds_equal_no_presolve0LinprogCommonTests.test_bounds_equal_no_presolve  s    
 FAc
#1v&!/3||<|$,,s##|<*atT4![[!53 =s   A0c                 8   Su  p[         R                  R                  S5      nUR                  U5      nSUS'   UR                  X5      nSUS S 2S4'   UR                  U5      n/ SQ/nSn/ SQn	[	        XGXXiU R
                  U R                  S9n
[        U
SS	9  g )
Nr%  r   r   )r   r   r   r   r#   )r|   rd   r  )r|   Nr   r   gyMj#r   )r:   r;   r<   rG   r
   r   r   r5   )r   r\   rI   rJ   rT   ro   rp   rm   rn   rs   r   s              r   test_zero_column_1%LinprogCommonTests.test_zero_column_1+  s    ii##A&HHQK!xx~QT
xx{~Bat4![[$,,@)<=r   c                 Z   U R                   S;   a  [        R                  " 5         [        R                  R                  S5      nSu  p#UR                  U5      nSUS'   UR                  X#5      nSUS S 2S4'   UR                  U5      nUR                  X#5      nSUS S 2S4'   UR                  U5      nSn	[        XGXXiU R                   U R                  S9n
[        U
5        U R                  R                  SS	5      (       a(  S
U R                   ;  a  [        U
R                  S5        g g g )N>   r   	highs-ipmr   r&   r7   r   r   r   rD  Tr   )r   r   xfailr:   r;   r<   rG   r
   r   r$   rL  r   r   )r   rJ   r\   rI   rT   ro   rp   rm   rn   rs   r   s              r   test_zero_column_2%LinprogCommonTests.test_zero_column_2:  s    ;;33LLNii##A&HHQK!xx~QT
xx{xx~QT
xx{at4![[$,,@#<<J--'2L !$	 3M-r   c                     / SQn/ SQ/ SQ/ SQ/n/ SQn[        U[        [        X#[        U R                  U R
                  S9n[        USS9  g )Nr$  r   r   r   r   r   r   r   r#   r   r   r#   r   r
   rm   rn   rs   r   r   r5   r   rT   ro   rp   r   s        r   test_zero_row_1"LinprogCommonTests.test_zero_row_1U  sD    9i0atT![[$,,@+r   c                     / SQ/ SQ/ SQ/n/ SQn/ SQn[        X1U[        [        [        U R                  U R
                  S9n[        USS9  g )Nr  r  r  r$  r   r   r   rr  )r   rm   rn   rT   r   s        r   test_zero_row_2"LinprogCommonTests.test_zero_row_2]  sD    9i0atT4![[$,,@+r   c                    Su  p[         R                  R                  S5      nUR                  U5      nUR                  X5      nSUSS S 24'   UR                  U5      n[	        U[
        [        XV[        U R                  U R                  S9n[        U5        U R                  R                  SS5      (       a  [        UR                  S5        g g Nr&   i  r   r   rD  T)r:   r;   r<   rG   r
   rm   rn   rs   r   r   r!   rL  r   r   )r   r\   rI   rJ   rT   ro   rp   r   s           r   test_zero_row_3"LinprogCommonTests.test_zero_row_3e  s    ii##D)HHQKxx~QT
xx{atT![[$,,@3 <<J--!$ .r   c                    Su  p[         R                  R                  S5      nUR                  U5      nUR                  X5      nSUSS S 24'   UR                  U5      * n[	        XEU[
        [        [        U R                  U R                  S9n[        U5        U R                  R                  SS5      (       a  [        UR                  S5        g g r  )r:   r;   r<   rG   r
   ro   rp   rs   r   r   r!   rL  r   r   )r   r\   rI   rJ   rT   rm   rn   r   s           r   test_zero_row_4"LinprogCommonTests.test_zero_row_4t  s    ii##D)HHQKxx~QT
|atT4![[$,,@3 <<J--!$ .r   c                    / SQn/ SQ/ SQ/ SQ/ SQ/n/ SQn[        U[        [        X#[        U R                  U R
                  S9n[        U5        U R
                  R                  SS5      (       a  [        UR                  S	5        g g )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r'   r   rD  Tr   )
r
   rm   rn   rs   r   r   r!   rL  r   r   r  s        r   test_singleton_row_eq_1*LinprogCommonTests.test_singleton_row_eq_1  sp    lL,GatT![[$,,@3 <<J--!$ .r   c                     / SQn/ SQ/ SQ/ SQ/ SQ/n/ SQn[        U[        [        X#[        U R                  U R
                  S9n[        USS9  g )	Nr  r  r  r  )r   r   r   r'   r   r'   r   r  r  s        r   test_singleton_row_eq_2*LinprogCommonTests.test_singleton_row_eq_2  sF    lL,GatT![[$,,@+r   c                    / SQn/ SQ/ SQ/ SQ/ SQ/n/ SQn/ SQn[        XU[        [        UU R                  U R                  S9n[        U5        U R                  R                  S	S
5      (       a  [        UR                  S5        g g )Nr  r  r  r7   r   r   r   r  )r   r   r   r'   r   r   r   r   r   rD  Tr   	r
   ro   rp   r   r   r!   rL  r   r   r  s         r   test_singleton_row_ub_1*LinprogCommonTests.test_singleton_row_ub_1  su    lM<H@atT4![[$,,@3 <<J--!$ .r   c                     / SQn/ SQ/ SQ/ SQ/ SQ/n/ SQn/ SQn[        XU[        [        UU R                  U R                  S9n[        US	S
9  g )Nr  r  r  r  r  )r   r         r'   r  r   rg   r   )r
   ro   rp   r   r   r5   r  s         r   test_singleton_row_ub_2*LinprogCommonTests.test_singleton_row_ub_2  sK    lM<H@atT4![[$,,@-r   c                     SS/nSS/SS/SS//n/ SQn[        XU[        [        [        U R                  U R
                  S9n[        U5        g )Nr7   r   r   )r   r   rH  r   )r
   ro   rp   rs   r   r   r!   rn  s        r   test_infeasible"LinprogCommonTests.test_infeasible  sX    HAAR atT4![[$,,@3r   c                     S/nS//nSnSn[        XU[        [        UU R                  U R                  S9n[        U5        U R                  R                  SS5      (       a  [        UR                  S5        g g )	Nr   r   r'   )r'  ry   r   rD  Tr   r  r  s         r   !test_infeasible_inequality_bounds4LinprogCommonTests.test_infeasible_inequality_bounds  sr    CuatT4![[$,,@3 <<J--!$ .r   c                     [         R                  " SS/5      S-  nSS/SS//nSS/n[        XU[        [        [
        U R                  U R                  S9n[        U5        g )Nr   r7   r   r   )	r:   rD   r
   ro   rp   rs   r   r   r$   rn  s        r   test_unbounded!LinprogCommonTests.test_unbounded  sa    HHaVr!QRBxatT4![[$,,@#r   c                    S/nS/nU R                    Vs0 s H  o3U R                   U   _M     nnSUS'   [        XU R                  US9nU R                  S:X  a  [        UR                  S5        g [        U5        g s  snf )Nr   Nr   FrD  rX  r   r'  )r   r
   r   r   r   r$   )r   rT   rs   r  r  r   s         r   *test_unbounded_below_no_presolve_corrected=LinprogCommonTests.test_unbounded_below_no_presolve_corrected  s}    C/3||<|$,,s##|<*![[! ;;++Q'c" =s   A=c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n/ SQn[        XU[        [        UU R
                  U R                  S9n[        U5        U R
                  R                  5       R                  S5      (       dA  [        UR                  S	   [         R                  5        [        UR                  S
S S5        g
g
)d
Test whether presolve pathway for detecting unboundedness after
constraint elimination is working.
)r   r   r   r   r7   r7   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r7   r   r   r   )r   r   r   rd  rd  r   r   r   r7   N$   $The problem is (trivially) unboundedr:   rD   r
   ro   rp   r   r   r$   lowerr   r   r1   rh   r.   r  s         r   *test_unbounded_no_nontrivial_constraints_1=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1  s    
 HH)*xx++,. / xx
#/atT4![[$,,@#{{  "--g66rBFF+Sb)?A 7r   c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n/ SQn[        XU[        [        UU R
                  U R                  S9n[        U5        U R
                  R                  5       R                  S5      (       dB  [        UR                  S	   [         R                  * 5        [        UR                  S
S S5        g
g
)r  )r   r   r   r   r7   r   r  r  )r   r   r   r   r   r   r  )r   r   r   rd  rd  )Nr   r   r   r7   Nr  r  r  r  s         r   *test_unbounded_no_nontrivial_constraints_2=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2  s    
 HH()xx+++- . xx
#/atT4![[$,,@#{{  "--g66rRVVG,Sb)?A 7r   c                     [         R                  " / SQ5      S-  n/ SQ/ SQ/ SQ/n/ SQn[        XU[        [        [
        U R                  U R                  S9n[        U/ SQS	S
S9  g )N)r2  rd   r   r7   rF  )re   r   r   )   re   r   )r   r2  '  r   )r   r   r  gh㈵>Hz>)r3   r-   r,   rm  rn  s        r   test_cyclic_recovery'LinprogCommonTests.test_cyclic_recovery  s^     HH\"R' atT4![[$,,@}4dKr   c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/5      n/ SQnSnU R                  R                  5        VVs0 s H  u  pVXV_M	     nnnXGS'   [	        XU[
        [        [        U R                  US9nU R                  S	:X  a/  U R                  R                  S
5      (       d  [        XS   5        g [        U/ SQS9  g s  snnf )N)r|   9   rz   g      8@)rg   g      r   rz   )rg   g      r  r   r  )r   r   r   r2  r   r   r   bland)r   r   r   r   rv  )r:   rD   r   itemsr
   ro   rp   rs   r   rL  r   r5   )	r   rT   rm   rn   r   r  valr  r   s	            r   test_cyclic_bland$LinprogCommonTests.test_cyclic_bland  s    HH&'xx--%' (  &*ll&8&8&:;&:(#SX&:;)atT4![[!5 ;;)#DLL,<,<W,E,E+C9> C<8 <s   C!c                    Su  p[         R                  R                  S5      nUR                  U5      nUR                  X5      nUR                  U5      nSUSS S 24   -  USS S 24'   US==   S-  ss'   [	        5        nUR                  [        S5        [        U[        [        XV[        U R                  U R                  S9nS S S 5        [        W5        g ! , (       d  f       N= f)N)rd   rd   r   r   r   r7   A_eq does not appear...r   )r:   r;   r<   rG   r   r+  r   r
   rm   rn   rs   r   r   r!   )	r   r\   rI   rJ   rT   ro   rp   r,  r   s	            r   $test_remove_redundancy_infeasibility7LinprogCommonTests.test_remove_redundancy_infeasibility,  s     ii##A&HHQKxx~xx{$r1u+oRURB CJJ(AB!T4V!%dllDC ! 	3	 ! s   AC
C)c                     [        5       u  pp4pVn[        XX4U[        U R                  U R                  S9n[        XUS9  g )Nr   r   )r   r
   rs   r   r   r5   	r   rT   rm   rn   ro   rp   r   r   r   s	            r   test_nontrivial_problem*LinprogCommonTests.test_nontrivial_problem@  s@     5G4H1T6at4![[$,,@6Br   c                 ^   [        SS5      u  pn[        5        nUR                  [        S5        UR                  [        S5        UR                  [
        5        [        X1U[        [        [        U R                  U R                  S9nS S S 5        [        WSS9  g ! , (       d  f       N= f)Nre   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rb   r   r+  r   rY  r   r
   ro   rp   rs   r   r   r5   )r   rm   rn   rT   r,  r   s         r   test_lpgen_problem%LinprogCommonTests.test_lpgen_problemH  s     !R(A CJJ(NOJJ~'BCJJ}%!4tV!%dllDC	 ! 	7 ! s   A1B
B,c                    / SQnSu  p#X"USUSSSSUSS/USSUSUSSSSSS/SSX"SSSSSSSS/SSSSSSX3SSUS/SSSSX"USUSSS/SSSSSSSX"SSU/SSSSSSSSSX"U//n/ SQn[        5        nUR                  [        5        [        U[        [
        XE[        U R                  U R                  S9nS S S 5        [        WSSSS	9  g ! , (       d  f       N= f)
N)r   r'   rz      r'   r#   rv   r}   r   rK        rd  r   )r      i!   r   r   ir   i  ư>r  )r2   r-   r,   )
r   r+  r   r
   rm   rn   rs   r   r   r5   )r   rT   rI   pro   rp   r,  r   s           r   test_network_flow$LinprogCommonTests.test_network_flowU  s*    51aAq!Q1a01aAq!Q1a01Aq!Q1a01aAqQ1a01aq!Q1a01aAq!1a01aAq!Qa02 + CJJ}%!T4V!%dllDC ! 	4dC	 ! s   .AC
Cc                 
   / SQnSS/SS/SS/SS/SS//nSu  p4X3SSS/USX3S/SXDSU/SSSXD//n/ SQn[        5        n[        (       a  UR                  [        5        UR                  [        S	5        UR                  [
        S
5        UR                  [
        S5        UR                  [        5        [        U[        [        XVUU R                  U R                  S9nS S S 5        [        WSS9  g ! , (       d  f       N= f)N)r   r   r   r#   r   r   r'   r   r#   r'  rd  )r   r   r   r'   scipy.linalg.solve
Ill...r  Solving system with option...r   r  r   )r   has_umfpackr+  r   rY  r   r   r
   rm   rn   r   r   r5   )	r   rT   rs   rI   r	  ro   rp   r,  r   s	            r   "test_network_flow_limited_capacity5LinprogCommonTests.test_network_flow_limited_capacityj  s    FFFFF 1aO1OaO1aO	
  C{

>*JJ~'CDJJ(ABJJ(GHJJ}%!T4V!%dllDC ! 	, ! s   B#C44
Dc                     / SQn/ SQ/ SQ/nSS/n[        XU[        [        [        U R                  U R
                  S9n[        USS9  g )	N)r   r{   r   )r#   r   r   )r   r'  r#   rd   rK  r   ir   rr  rn  s        r   (test_simplex_algorithm_wikipedia_example;LinprogCommonTests.test_simplex_algorithm_wikipedia_example  sK     BxatT4![[$,,@-r   c                     / SQn/ SQ/ SQ/ SQ/n/ SQn[        U[        [        X#[        U R                  U R
                  S9n[        US/ SQS	S
S9  g )Nr9  r:  r;  r=  r>  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r2   r3   r-   r,   r  r  s        r   test_enzo_example$LinprogCommonTests.test_enzo_example  sV     ! " atT![[$,,@"@!	.r   c                 "   / SQn/ SQ/ SQ/ SQ/ SQ/ SQ/n/ SQn[        5        nUR                  [        S5        [        U[        [
        X#[        U R                  U R                  S	9nS S S 5        [        WS
/ SQS9  g ! , (       d  f       N= f)N)r  g333333@g%@r  g333333g%)r7   r7   r7   r   r   r   )r   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
   rm   rn   rs   r   r   r5   )r   rT   ro   rp   r,  r   s         r   test_enzo_example_b&LinprogCommonTests.test_enzo_example_b  s}    /%""""	$
 * CJJ(AB!T4V!%dllDC ! 	"@	B	 ! s   AB  
Bc                    Sn[         R                  " U5      * nS[         R                  -  [         R                  " SUS-   5      -  US-   -  n[         R                  " [         R
                  " U5      S-
  [         R                  " U5      45      nSS/n[        U[        [        XE[        U R                  U R                  S9n[        US[         R                  " U5      S9  g )Nre   r   r   r   r   r   )r:   r   pir=   rE   cossinr
   rm   rn   rs   r   r   r5   r?   )r   r\   rT   tmpro   rp   r   s          r   #test_enzo_example_c_with_degeneracy6LinprogCommonTests.test_enzo_example_c_with_degeneracy  s    WWQZK"%%i"))Aq1u--Q7yy"&&+/266#;781vatT![[$,,@bhhqkBr   c                    Sn[         R                  " U5      * nS[         R                  -  [         R                  " U5      -  US-   -  n[         R                  " U5      S-
  nSUS'   [         R
                  " U5      nSUS'   [         R                  " XE45      nSS/n[        U[        [        Xg[        U R                  U R                  S9n[        U5        g )Nrf   r   r   r  r   r   )r:   r   r  r=   r   r!  rE   r
   rm   rn   rs   r   r   r$   )	r   r\   rT   r"  row0row1ro   rp   r   s	            r   &test_enzo_example_c_with_unboundedness9LinprogCommonTests.test_enzo_example_c_with_unboundedness  s    WWQZK"%%i"))A,&!a%0 vvc{QQvvc{Qyy$&1vatT![[$,,@#r   c                    Sn[         R                  " U5      * nS[         R                  -  [         R                  " U5      -  US-   -  n[         R                  " [         R
                  " U5      S-
  [         R                  " U5      45      nSS/nU R                   Vs0 s H  ofU R                  U   _M     nnSUS'   [        U[        [        XE[        U R                  US9n[        U5        g s  snf )Nrf   r   r   FrD  r   )r:   r   r  r=   rE   r   r!  r   r
   rm   rn   rs   r   r!   )	r   r\   rT   r"  ro   rp   r  r  r   s	            r   &test_enzo_example_c_with_infeasibility9LinprogCommonTests.test_enzo_example_c_with_infeasibility  s    WWQZK"%%i"))A,&!a%0yy"&&+/266#;781v/3||<|$,,s##|<*atT![[!53 =s   C0c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ/ S	Q/5      n[         R                  " S
S
/5      n[        XX4U[        U R                  U R
                  S9n[        US
[         R                  " U5      SS9  g )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   r7   r   r7   r   )r   r  r7   r   r7   r   r   r   g>)r2   r3   r-   )r:   rD   r
   rs   r   r   r5   
zeros_like)r   rT   rm   rn   ro   rp   r   s          r   test_basic_artificial_vars-LinprogCommonTests.test_basic_artificial_vars  s    
 HH>?xx-/D.0D/1 2 xx23xx/1HIJxxAat4![[$,,@bmmA6F!	#r   c                    [        S5      u  pp4pV[        XX4UX`R                  U R                  S9n[	        UR
                  5        [	        UR                  5        [	        UR                  (       + 5        SU R                  ;  a  [	        UR                  S:H  5        [        XR                  -  UR                  5        [        XTUR                  -  -
  UR                  SS9  [        X2UR                  -  -
  UR                  SS9  S Hd  nXR                  5       ;   d  M  [        Xx   S   [         R"                  5      (       d   e[        Xx   S	   [         R"                  5      (       a  Md   e   g )
Nr   rm   rn   ro   rp   rs   r   r   r   z%Optimization terminated successfully.gdy=r-   )eqlinineqlinr  upper	marginalsresidual)rt   r
   r   r   r   r   r   r   r.   r   r1   r0   r   r   keysr   r:   ndarray)	r   rT   rm   rn   ro   rp   rs   r   r  s	            r   test_optimize_result'LinprogCommonTests.test_optimize_result  s   ,;A,>)Tat#KKOCJJ$++%CKK#JJKEE	377+cee|+SWW5Acee|+SYYUC9Chhj !#(;"7DDDD!#(:"6

CCCC :r   c           /         / SQnSnSnSn[         R                  " / SQSSSUSS	SS
SSS
SS
SSSSSS/SSSUSSS	S
S
SS
S
SSSSSSS// SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQSSS
S
SSSS
X"SSSUSSSSS/SSSSSS
S
SSSS
X"SUSSSS/SS
SS SSSUS
S
SSSSSUSSS/SSSSS
SS
SSSUS
USSSUSS/SS
S
S SSSX"S
SSSSSSSUS/SSSSS
S
SSSSX"S
SSSSSU//5      n[         R                  " / S!Q5      n[         R                  " / S"Q5      n[        5        nUR                  [        S#5        UR                  [
        S$5        UR                  [        5        [        XuU[        [        UU R                  U R                  S%9n	S S S 5        [        W	S&S'9  g ! , (       d  f       N= f)(N)r   r   r2  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   r7   r7   r   r7   r7   r   r   r   r   r   r   r   r   g333333r{   r7   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   gףp=
?r   gffffff?g @)r  r   r   r2  r2  r2  r2  r2  r2  rA  rA  rA  rA  rA  rA  r   r   r   r   r   r   r   r   r   r   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:   rD   r   r+  r   rY  r   r
   ro   rp   r   r   r5   )
r   rs   r  rV  hrm   rn   rT   r,  r   s
             r   test_bug_5400 LinprogCommonTests.test_bug_5400  sL   N xx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FFFFFFb"aAr1Aq!Q1aK1aBAq!Rq!Q1aHCaAq"b!Q1aAq!L1aQAq!QAq!Q1aHBQ1aB1aAq!QJ1aRAq!Q2q!Q1aH7J K: xx 5 6 HH 4 5 CJJ=?JJ~'BCJJ}%!4tV!%dllDC ! 	)<= ! s   0A-F00
F>c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/5      n[         R                  " SS/5      n[         R                  " / SQ/5      * n[         R                  " S/5      * nSn[        XXRX6U R                  U R                  S	9n[        US
[         R                  " / SQ5      S9  g )Nr  )r   r  r  )     @r  rG  g      @rB  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r'  g@r'  r   r:   rD   r
   r   r   r5   )r   rT   ro   rp   rm   rn   rs   r   s           r   test_bug_6139 LinprogCommonTests.test_bug_6139C  s     HHYxx'<=>xx9:2344)%%at4![[$,,@ 	"$((<"8	:r   c                    [         R                  " / SQ/5      n[         R                  " S/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / S	Q/ S
Q/5      R                  n[         R                  " / SQ5      n[        5        n[        (       a  UR                  [        5        UR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [        5        [        XcXAX%U R                  U R                  S9nS S S 5        Sn	[         R                  " / SQ5      n
[        WXS9  Sn[        US S 2S4   U-
  UR                  5        [        UR                  US S 2S4   U-   5        g ! , (       d  f       Nu= f)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   rN  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?r  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?rM  rg   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)
rT  rO  rP  r  rM  rg   rQ  rR  rU  rS  r   r  r   r   )r:   rD   ri   r   r  r+  r   r   rY  r   r
   r   r   r5   r   r1   )r   ro   rp   rm   rn   rs   rT   r,  r   r2   r3   r-   s               r   test_bug_6690 LinprogCommonTests.test_bug_6690Y  sw   
 xx@ABxx!xx4*-9.
  xx9:MH
  1 	 HH    C{

>*JJ>@JJ(NOJJ~'BCJJ}%!4t!%dllDC ! %HH G H	J &A,-suu5#%%1!45' ! s   6BF>>
Gc                 0   [        S5      u  pn  n[        5        nUR                  [        S5        UR                  [        S5        UR                  [
        5        [        U[        [        X[        U R                  U R                  S9nS S S 5        Sn[        WUS9  [        UR                  UR                  5      U5        [!        ["        R$                  " UR                  R&                  5      S-
  UR                  5        g ! , (       d  f       N= f)Nr#   r  r  r   -U?r   r   )rU   r   r+  r   rY  r   r
   rm   rn   rs   r   r   r5   r   dotr1   r   r:   r?   rX   )r   ro   rp   rT   _r,  r   r2   s           r   test_bug_7044 LinprogCommonTests.test_bug_7044  s    
 +1oAq! CJJ(ABJJ~'BCJJ}%!T4V!%dllDC	 ! "5."((355::.5suu= ! s   A1D
Dc                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ/5      n[         R                  " S//5      nS/S-  n[        XX4XVU R                  U R                  S9n[        USSS 9  g )!N)	r7   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   rz   r   ghb$[@r  r2   r-   rH  r  s           r   test_bug_7237 LinprogCommonTests.test_bug_7237  s    
 HH12xxE?BBEA8888888800000000- 0 xx 8 9 xx=>?xx"!#at4![[$,,@$?r   c                 ~   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " UR                  S   5      n[         R                  " UR                  S   5      * nS/UR                  S   -  n[        5        nUR                  [        S5        UR                  [        5        [        X1U[        [        UU R                  U R                  S	9nS S S 5        U R                  R                  S
S5      S:  a  U R                  S:X  a  [        W5        g [!        WSSS9  g ! , (       d  f       NV= f)N)X  i  iD4       3i)ii    @i  )rg  r   r   rf  r   )re  r   r   rh  r   r   r   r   r  r   tolg&.>绽|=r   g r  ra  )r:   rD   r?   rH   r   r   r+  rY  r   r
   ro   rp   r   r   rL  r(   r5   )r   rm   rn   rT   rs   r,  r   s          r   test_bug_8174 LinprogCommonTests.test_bug_8174  s     xx00%%	' (
 xx

1&WWTZZ]##DJJqM) CJJ~'BCJJ}%!4tV!%dllDC ! <<E4(50T[[I5M5c:C-@tL ! s   AD..
D<c                 H   [         R                  " / SQ5      n[         R                  " S5      * n[         R                  " S/S/S/S/S/S/S//5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " S	/S
/S
/S
/S
//5      n[        5        n[        (       a  UR                  [        5        UR                  [        S5        [        XX4U[        U R                  U R                  S9nS S S 5        [        WSS9  g ! , (       d  f       N= f)N)r   r   r   r   r   r   r   r}   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r7   )r  r   r   r   r   r   gUUUUUU)r   rL  r   r   r   r   )r   r   r  r   r   r   rn  r2  r   r  r   g?E@r   )r:   rD   identityr   r  r+  r   r   r
   rs   r   r   r5   r   rT   rm   rn   ro   rp   r,  r   s           r   test_bug_8174_2"LinprogCommonTests.test_bug_8174_2  s     HH*+Axx"tbTB4"tbTBCxx!(&('
  xx#aS1#s34 C{

>*JJ(AB!4tV!%dllDC	 ! 	)9: ! s   #AD
D!c                    [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[        XX0R                  U R                  S9n[        U/ S	QS
9  g )N)r}   r   r         ?rt  )r'         @rt  r         )r   r   r   r<  rg   )r#   r  r'   g      )rx   )r7   g      @r   rv  r   )ru  r   g      r7   g      #@)r   r   r   r   r   )rm   rn   r   r   )r   r   r  gUUUUUU@gUUUUUU#@rv  )r:   rD   r
   r   r   r5   rn  s        r   test_bug_8561 LinprogCommonTests.test_bug_8561  si    
 HH)*xx$##"#% & xx(a||![[*'=>r   c                 "   / SQn/ SQ/ SQ/ SQ/ SQ/n/ SQn/ SQnSn[        5        n[        (       a  UR                  [        5        UR                  [        S	5        UR                  [
        5        [        XU[        [        UU R                  U R                  S
9nS S S 5        UR                  / SQ5        UR                  S5        SUS'   [        5        n[        (       a  UR                  [        5        UR                  [        S	5        UR                  [
        5        [        XU[        [        UU R                  U R                  S
9nS S S 5        Sn	[        WXYS9  [        WXYS9  g ! , (       d  f       N= f! , (       d  f       N6= f)N)r|   rd   ry   r#   )rv   r~   r   ry   )r~   rv   r'   rw   )r   r'   rv   r   )r#   r{   r{   r|   )rz   rz  r   )r   r   r   r   g      B@r  r   )r   r   r7   r   r   r   r   r   )r2   r,   )r   r  r+  r   rY  r   r
   ro   rp   r   r   rB   r5   )
r   rT   rm   rn   rs   r2   r,  res1res2r,   s
             r   test_bug_8662 LinprogCommonTests.test_bug_8662   s2     " =# C{

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

>*JJ~'BCJJ}%1D$f"&++t||ED ! +A+A- !  ! s   A7E/A7F /
E= 
Fc                     SS/nSS//nS/nSS/n[        U[        [        X#UU R                  U R                  S9n[        USS	/S
S9  g )Nr   r'  r   rx   rw   r   r   r   g۶m۶m?gI$I$@ri  )r
   rm   rn   r   r   r5   r{  s         r   test_bug_8663 LinprogCommonTests.test_bug_8663$  s[     FByt\*atT![[$,,@4yfEr   c                 6   S/nS/S//nSS/nS/S/S//n/ SQn[        5        nUR                  [        5        UR                  [        S5        [	        XX4U[
        U R                  U R                  S	9nS S S 5        [        W5        g ! , (       d  f       N= f)
Nr'   r   r'  r   r~   rz   r#   r   rd   r  r   )	r   r+  rY  r   r
   rs   r   r   r!   rp  s           r   test_bug_8664 LinprogCommonTests.test_bug_8664/  s     CaSz1vbTA3 CJJ~&JJ(GH!4tV!%dllDC !
 	3 ! s   AB


Bc                 R   [         R                  " / SQ5      n[         R                  " / SQ/ SQ/5      n[         R                  " SS/5      n/ SQn[        XU[        [        UU R
                  U R                  S9n[        USS9  [        XR                  -  UR                  5        g	)
zV
Test whether bug described at:
https://github.com/scipy/scipy/issues/8973
was fixed.
)r   r   r   r   r7   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rd  rd  r   r   N)r:   rD   r
   ro   rp   r   r   r5   r   r1   r0   r  s         r   test_bug_8973 LinprogCommonTests.test_bug_8973?  s     HH%&xx/:;xxB MatT4![[$,,@ 	,QY(r   c                     [         R                  " S5      n[         R                  " S//5      n[         R                  " S/5      nSn[        XU[        [
        UU R                  U R                  S9n[        US/SS9  g)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   ri  N)	r:   r?   rD   r
   ro   rp   r   r   r5   r  s         r   test_bug_8973_2"LinprogCommonTests.test_bug_8973_2P  sf     HHQKxx!xx~atT4![[$,,@t;r   c                 T   [         R                  " S5      n[         R                  " S//5      n[         R                  " S/5      nSnSS/nSS/SS//nSS/nSS	/nS
S0nUR                  U R                  5        [        XU[        [        UU R                  US9n[        USS/SS9  g)zO
Test for linprog docstring problem
'disp'=True caused revised simplex failure
r   r   r   r7   r'   r{   r   ry   r   r   Tr   rd   r   ri  N)
r:   r?   rD   updater   r
   ro   rp   r   r5   )r   rT   rm   rn   rs   r  r   s          r   test_bug_10124!LinprogCommonTests.test_bug_10124`  s    
 HHQKxx!xx~GQ!Q 1v
+TN	atT4![[!5BxSAr   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " SS	[         R                  " S
5      4SS9n[	        5        nUR                  [        S5        [        U[        [        X[        U R                  U R                  S9nSSS5        [        W/ SQSS9  g! , (       d  f       N= f)zY
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   )      rd         f   r   r   r'   Naxisr  r   )   \   r  r  r   rd   r  ri  )r:   rD   concatenater?   r   r+  r   r
   rm   rn   rs   r   r   r5   )r   ro   rp   rT   r,  r   s         r   test_bug_10349!LinprogCommonTests.test_bug_10349s  s    
 xx++++++- . xx56NNAq"((1+.T: CJJ(AB!T4V!%dllDC ! 	'@bQ	 ! s   7AC
C!darwinz0Failing on some local macOS builds, see gh-13846reasonc                    / SQn/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/
n/ SQn0 nU R                   R                  S5      (       d  SS0nUR                  U R                  5        [	        5        nUR                  [        S5        [        (       a  UR                  [        5        UR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [        S5        UR                  [        S5        [        U[        [        X#[        U R                   US9nSSS5        [        WR                   S5        g! , (       d  f       N%= f)z1
Test that autoscale fixes poorly-scaled problem
)       r`  r  r`  r  r`  r`  r`  r`  r`  r`  r`  r`  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r  r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  r   r  r   r  r  r  r  r  r  r   r  )r  r  r   r  r   r  r  r  r  r  r  r  r   )
g     Ag      Ag     @Ag      A   Ar  r  r  r  r  r   	autoscaleTr  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...r   Nl )r   r   r  r   r   r+  r   r  r   rY  r   r
   rm   rn   rs   r   r0   )r   rT   ro   rp   r  r,  r   s          r   test_bug_10466!LinprogCommonTests.test_bug_10466  s    NDDDEDDDDDD	F 
 {{%%g..d#A	 CJJ(GH{

>*JJ~'CDJJ~'FGJJ~'@AJJ~'EFJJ}&AB!T4V!%a9C ! 	- ! s   4C
E
E+r   N)Y__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r  r   markthread_unsafer  r  r-  r6  rA  rO  rR  r^  ra  rf  rj  ro  rs  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+  r0  r<  rD  rI  rV  r\  rb  rk  rq  rw  r}  r  r  r  r  r  r  skipifsysplatformr  __static_attributes__r   r   r   r   r   n  s$   $8	.@)); [[9 9  [[2 2$O8B'%@%. [[') ')R
%F
@F
/;G;GGN   ">%6,,%%
%,%.	 %# A(A(
L92 (C8D*->	..(B"	C" #"D.5>n:,*6X>$'@RM.;0?""BH	F  )"< B&R& [[0!/  1&.1&.r   r   zignore::DeprecationWarningc                       \ rS rSrSrSrg)LinprogSimplexTestsi  r   r   Nr  r  r  r  r   r  r   r   r   r  r    s    Fr   r  c                       \ rS rSrSrS rSrg)LinprogIPTestsi  r   c                 0    [         R                  " S5        g )Nz*Test is failing, but solver is deprecated.r   skipr   s    r   r  LinprogIPTests.test_bug_10466  s    @Ar   r   N)r  r  r  r  r   r  r  r   r   r   r  r    s    FBr   r  c                   *    \ rS rSrSrS rS rS rSrg)LinprogRSTestsi  r   c                 0    [         R                  " S5        g Nz Intermittent failure acceptable.r  r   s    r   rD  LinprogRSTests.test_bug_5400      67r   c                 0    [         R                  " S5        g r  r  r   s    r   r}  LinprogRSTests.test_bug_8662  r  r   c                 0    [         R                  " S5        g r  r  r   s    r   r
   LinprogRSTests.test_network_flow  r  r   r   N)	r  r  r  r  r   rD  r}  r
  r  r   r   r   r  r    s    F$888r   r  c                   R   \ rS rSrS r\R                  R                  \R                  R                  SSS0SS0SS0SS0S	S0S
S0SS0SS0/5      S 5       5       r	S r
\R                  R                  S5      S 5       rS rS r\R                  R                  SS9S 5       rSrg)LinprogHiGHSTestsi  c           
          S n[         R                  " SS/5      nSS/SS/SS//n/ SQn[        [        [        X#UXR
                  S9  [	        X#X@R
                  S	9n[        US
SS/S9  g )Nc                     g r   r   r    s    r   r   +LinprogHiGHSTests.test_callback.<locals>.cb  s    r   r{   r   r   r   r   r   r   r   r   ry   r   )r:   rD   r   NotImplementedErrorr
   r   r5   )r   r   rT   rm   rn   r   s         r   r   LinprogHiGHSTests.test_callback  sn    	HHb"XAAA')7At!++	7akkB1a&Ar   r   r   r7   r   rD  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                 d   ^  U 4S jnUR                  T R                  5        [        [        X!S9  g )Nc                 0   > [        STR                  U S9  g )Nr   r   r
  )r   r   s    r   r  7LinprogHiGHSTests.test_invalid_option_values.<locals>.f  s    Adkk7;r   r   )r  r   r   r   )r   r   r  s   `  r   test_invalid_option_values,LinprogHiGHSTests.test_invalid_option_values  s"    	<t||$_a9r   c           	          [        S5      u  pn  nSn[        X1UXPR                  U R                  S9n[	        UR
                  S:H  U R                  S:g  5        g )Nr'   r   rJ  r   r  )rU   r
   r   r   r   crossover_nit)r   ro   rp   rT   r[  rs   r   s          r   test_crossover LinprogHiGHSTests.test_crossover   sU    *1oAq!a#KKO 	S&&!+T[[K-GHr   rd   c                   ^ ^
^^^^^^^ [        SS9u  mmmm
mm[        TTTT
TTT R                  T R                  S9nTR                  u  mmU
UUUUU 4S jn[        UTSUR                  S9n[        UR                  R                  U5        U
UUUUU 4S jn[        UTSUR                  S9n[        UR                  R                  U5        U
UUUUU U4S jn[        R                  " S	S
9   [        UTSUR                  S9nSU[        R                  " T5      ) '   S S S 5        [        UR                  R                  W5        U
UUUUUU 4S jn[        R                  " S	S
9   [        UTSUR                  S9n	SU	[        R                  " T5      ) '   S S S 5        [        UR                  R                  W	5        g ! , (       d  f       N= f! , (       d  f       N@= f)Nr   rj   r3  c           
      J   > [        TTU TTTTR                  S9R                  $ Nr   r
   r   r0   )r1   ro   rm   rp   rs   rT   r   s    r   f_bub/LinprogHiGHSTests.test_marginals.<locals>.f_bub  s(    1dAtT6"&++//2s3r   z3-point)r   f0c           
      J   > [        TTTTU TTR                  S9R                  $ r  r  )r1   ro   rm   rn   rs   rT   r   s    r   f_beq/LinprogHiGHSTests.test_marginals.<locals>.f_beq  s(    1dD$6"&++//2s3r   c           
         > [         R                  " U T/5      R                  n[        TTTTTUTR                  S9R
                  $ r  r:   rD   ri   r
   r   r0   )	r1   rs   ro   rm   rp   rn   rT   r   rr   s	     r   f_lb.LinprogHiGHSTests.test_marginals.<locals>.f_lb"  s@    XXq"g&((F1dD$f"&++//2s3r   ignore)invalidc           
         > [         R                  " TU /5      R                  n[        TTTTTUTR                  S9R
                  $ r  r  )	r1   rs   ro   rm   rp   rn   rT   rq   r   s	     r   f_ub.LinprogHiGHSTests.test_marginals.<locals>.f_ub/  s@    XXr1g&((F1dD$f"&++//2s3r   )rt   r
   r   r   ri   r   r0   r   r6  r8  r5  r:   errstateisfiniter  r7  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubro   rm   rp   rn   rs   rT   rq   rr   s   `         @@@@@@@@r   test_marginals LinprogHiGHSTests.test_marginals  s    -<,C)4tT6adDt#DKKOB	3 	3 #5$ySWWM--v6	3 	3 #5$ySWWM		++V4	3 	3
 [[*%dBySWWME&'E2;;r?"# +
 			++U3	3 	3
 [[*%dBySWWME&'E2;;r?"# + 			++U3# +* +*s   /1G(1G
G
G!c                 h   [        SS9u  pp4pV[        XX4UX`R                  U R                  S9nU* UR                  UR
                  R                  -  -   UR                  UR                  R                  -  -   UR                  R                  -   UR                  R                  -   n[        USSS9  g )Nr  r  r3  r   -q=r4  )rt   r
   r   r   ri   r6  r8  r5  r7  r  r   )	r   rT   rm   rn   ro   rp   rs   r   resids	            r   test_dual_feasibility'LinprogHiGHSTests.test_dual_feasibility:  s    ,;,D)Tat#KKO
 dffs{{4444#))---.$$% $$% 	qu-r   c                     [        SS9u  pp4pV[        XX4UX`R                  U R                  S9n[        R
                  " UR                  R                  X2UR                  -  -
  -  S5      (       d   eg )Nr  r  r3  r   )	rt   r
   r   r   r:   allcloser6  r8  r1   r  s           r   test_complementary_slackness.LinprogHiGHSTests.test_complementary_slacknessH  sd    ,;,D)Tat#KKO {{3;;00D#%%<4GH!LLLLr   z&Upstream / Wrapper issue, see gh-20589r  c           	         / SQn/ SQn/ SQn/ SQn/ SQn/ SQn[         R                  " U[         R                  S9n[         R                  " U[         R                  S9n[         R                  " U[         R                  S9n	[        R
                  R                  XxU	44SS	9n
[         R                  " U[         R                  S9n[         R                  " U[         R                  S9n[        R                  R                  US
S
XUS9nUR                  S:X  d   eUR                  n[         R                  R                  X-  U-
  5      n[         R                  R                  UR                  R                  5      n[        UU5        g
)z8
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'  ry   ry   r}   r}   rv   rv   rz   rz   rd   r  r  r  r  r  r     r  r  r  r  r  rK  rK  r  r  r  r     r  r  r  r  r  r  r  re   re   re   re      r     r	  r	  r	     r
     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )SrK  r  r  r  r  r  r  re   r
  r	  r  r  r  r  r  r  r  r  r  r   r       r#   r  r  r'   r   r'   r   r  r  r   r  r   r  r  rK  r'  r'   r'  r'   r  r  ry   r'  ry   r'  re   r  r}   ry   r}   ry   r	  r  rv   r}   rv   r}   r  r
  rz   rv   rz   rv   r  r  rd   rz   rd   rz   r  r  r  rd   r  rd   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  r8   )r  r  )rH   N)rm   rn   ro   rp   rs   r   )r:   asarrayr  int32r   r   	csr_arrayoptimizer
   r   r1   linalgnormr5  r9  r   )r   
boundaries
eq_entries
eq_indizeseq_vars	eq_valuescoefficientsnp_eq_entriesnp_eq_indizes
np_eq_varsa_eqrp   rT   resultr1   n_r_xn_rs                    r   test_bug_20336 LinprogHiGHSTests.test_bug_20336S  s7   
	#
9
N

3
?	T 

:RZZ@

:RXX>ZZrxx8
||%%}Z5P&Q,4 & 6zz)2::6JJ|2::6''4d/9 ( ;}}aHH		tx$/iinnV\\223U#r   r   N)r  r  r  r  r   r   r  r  parametrizer  r  	fail_slowr  r  r  r  r'  r  r   r   r   r  r    s    
B [[[[Y("o%rl)2.+R0;R@=rB92>BFK 	!:	! :I [[2/4 /4b.	M [[FGA$ HA$r   r  c                   l   ^  \ rS rSrS rS rS r\R                  R                  U 4S j5       r
SrU =r$ )TestLinprogSimplexDefaulti  c                     0 U l         g r   r  r   s    r   setup_method&TestLinprogSimplexDefault.setup_method  s	    r   c                 0    [         R                  " S5        g NzSimplex fails on this problem.r  r   s    r   rD  'TestLinprogSimplexDefault.test_bug_5400      45r   c                 0    [         R                  " S5        g r1  r  r   s    r   test_bug_7237_low_tol/TestLinprogSimplexDefault.test_bug_7237_low_tol  s     	45r   c                    > U R                   R                  SS05        [        R                  " [        5         [
        TU ]  5         S S S 5        g ! , (       d  f       g = fNri  r  r   r  r   r   r   superrk  r   	__class__s    r   test_bug_8174_low_tol/TestLinprogSimplexDefault.test_bug_8174_low_tol  >     	UEN+\\/*G!# +**   A
Ar  )r  r  r  r  r.  rD  r5  r   r  r  r=  r  __classcell__r<  s   @r   r,  r,    s0    66
 [[$ $r   r,  c                   f   ^  \ rS rSrS rS r\R                  R                  U 4S j5       r	Sr
U =r$ )TestLinprogSimplexBlandi  c                     SS0U l         g )Nr  Tr  r   s    r   r.  $TestLinprogSimplexBland.setup_method  s    r   c                 0    [         R                  " S5        g r1  r  r   s    r   rD  %TestLinprogSimplexBland.test_bug_5400  r3  r   c                 ,  > U R                   R                  SS05        [        R                  " [        5         [        R
                  " [        5         [        TU ]!  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr8  )	r   r  r   r	   r/   r   r   r:  rk  r;  s    r   r=  -TestLinprogSimplexBland.test_bug_8174_low_tol  s[     	UEN+]]>*o.%' / +*.. +*s#   BA4#B4
B	>B
Br  )r  r  r  r  r.  rD  r   r  r  r=  r  rA  rB  s   @r   rD  rD    s+    '6 [[( (r   rD  c                   J  ^  \ rS rSrS r\R                  " S5      R                  S:  r\	R                  R                  S5      r\R                  R                  \=(       a    \SS9U 4S j5       rU 4S	 jrS
 r\R                  R&                  U 4S j5       rS rS rSrU =r$ )TestLinprogSimplexNoPresolvei  c                     SS0U l         g )NrD  Fr  r   s    r   r.  )TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rv   linuxz"Fails with warning on 32-bit linux)	conditionr  c                 "   > [         TU ]  5         g r   )r:  rD  r;  s    r   rD  *TestLinprogSimplexNoPresolve.test_bug_5400  s     	r   c                    > U R                   R                  SS05        [        R                  " [        SS9   [
        TU ]  5       sS S S 5        $ ! , (       d  f       g = f)Nri  r  zlinprog status 4r   )r   r  r   r	   r/   r:  rI  r;  s    r   test_bug_6139_low_tol2TestLinprogSimplexNoPresolve.test_bug_6139_low_tol  sB    
 	UEN+]]>1CD7(* EDDs   A
Ac                 0    [         R                  " S5        g r1  r  r   s    r   r5  2TestLinprogSimplexNoPresolve.test_bug_7237_low_tol  r3  r   c                    > U R                   R                  SS05        [        R                  " [        5         [
        TU ]  5         S S S 5        g ! , (       d  f       g = fr8  r9  r;  s    r   r=  2TestLinprogSimplexNoPresolve.test_bug_8174_low_tol  r?  r@  c                 0    [         R                  " S5        g Nz#Tests behavior specific to presolver  r   s    r   r  GTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:r   c                 0    [         R                  " S5        g r[  r  r   s    r   r  GTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r]  r   r  )r  r  r  r  r.  r:   intpitemsize	is_32_bitr  r  r   is_linuxr   r  r  rD  rT  r5  r  r=  r  r  r  rA  rB  s   @r   rL  rL    s    + 
##a'I||&&w/H[[(3  5 5 +6 [[$ $;; ;r   rL  c                      ^  \ rS rSrSS0r\R                  R                  \R                  S:H  SS9U 4S j5       r
SrU =r$ )	TestLinprogIPDensei  r   Fr  z:Fails on some macOS builds for reason not relevant to testr  c                 "   > [         TU ]  5         g r   r:  rI  r;  s    r   rI   TestLinprogIPDense.test_bug_6139  s    
 	r   r   )r  r  r  r  r   r   r  r  r  r  rI  r  rA  rB  s   @r   re  re    sD    G [[ K   	 r   re  c                       \ rS rSrSSS.rSrg)TestLinprogIPSparseCholmodi  Tr   r   r   Nr  r  r  r  r   r  r   r   r   rj  rj    s    !t4r   rj  c                   $    \ rS rSrSSS.rS rSrg)TestLinprogIPSparseUmfpacki  TFrk  c                 0    [         R                  " S5        g )Nz2Failing due to numerical issues on some platforms.r  r   s    r   r  =TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KKLMr   r   N)r  r  r  r  r   r  r  r   r   r   rn  rn    s    !u5	Nr   rn  c                     ^  \ rS rSrSSSS.r\R                  R                  \R                  S:H  SS9\R                  R                  S5      U 4S	 j5       5       r\R                  R                  S
S9U 4S j5       rS rS rSrU =r$ )TestLinprogIPSparsei  TFr   r   sym_posr  /Fails on macOS x86 Accelerate builds (gh-20510)r  rThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                 "   > [         TU ]  5         g r   rg  r;  s    r   rI  !TestLinprogIPSparse.test_bug_6139       	r   Fails with ATLAS, see gh-7877c                 "   > [         TU ]  5         g r   r:  rV  r;  s    r   rV  !TestLinprogIPSparse.test_bug_6690       	r   c                    [        S5      u  pn  nSn[        5        n[        (       a  UR                  [        5        UR                  [
        S5        UR                  [        S5        U R                   Vs0 s H  owU R                  U   _M     nnSUS'   [        U[        [        XUU R                  US9n	S S S 5        [        W	SS	9  g s  snf ! , (       d  f       N= f)
Nr#   r   zMatrix is exactly singularr  FrD  r   rY  r   )rU   r   r  r+  r   r   r   r   r
   rm   rn   r   r5   )
r   ro   rp   rT   r[  rs   r,  r  r  r   s
             r   $test_magic_square_sparse_no_presolve8TestLinprogIPSparse.test_magic_square_sparse_no_presolve  s    *1oAq! C{

>*JJ(*FGJJ(GH37<<@<Cdll3''<A@!AjM!T4V!%a9C ! 	5 A ! s   AC8C(CC
Cc                    [        S5      u  pn  n[        5        nUR                  [        S5        UR                  [        S5        U R                   Vs0 s H  ofU R                  U   _M     nnSnU H6  n	XS'   [        U[        [        X[        U R                  US9n
[        U
SS9  M8     S S S 5        g s  snf ! , (       d  f       g = f)	Nr#   r  zInvalid permc_spec option)NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   rY  r   )rU   r   r+  r   r   r
   rm   rn   rs   r   r5   )r   ro   rp   rT   r[  r,  r  r  permc_specsr  r   s              r   test_sparse_solve_options-TestLinprogIPSparse.test_sparse_solve_options/  s    *1oAq! CJJ(ABJJ(CD37<<@<Cdll3''<A@7K *
",,atT%)[[!==	 * !  A ! s   ;B=B8/A B=8B==
Cr   )r  r  r  r  r   r   r  r  r  r  xfail_on_32bitrI  r  rV  r  r  r  rA  rB  s   @r   rr  rr    s    5UCG[[ @   [[ !: ; ;	  [[=>  ? 6$> >r   rr  c                     ^  \ rS rSrSSS.r\R                  R                  \R                  S:H  SS9\R                  R                  S5      U 4S j5       5       rS	 r\R                  R                  S
S9U 4S j5       rSrU =r$ )TestLinprogIPSparsePresolveiA  T)r   r)  r  ru  r  rv  c                 "   > [         TU ]  5         g r   rg  r;  s    r   rI  )TestLinprogIPSparsePresolve.test_bug_6139D  ry  r   c                 0    [         R                  " S5        g )Nz6_sparse_presolve=True incompatible with presolve=Falser  r   s    r   r+  BTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityN  s    LMr   rz  c                 "   > [         TU ]  5         g r   r|  r;  s    r   rV  )TestLinprogIPSparsePresolve.test_bug_6690Q  r~  r   r   )r  r  r  r  r   r   r  r  r  r  r  rI  r+  r  rV  r  rA  rB  s   @r   r  r  A  s    48G[[ @   [[ !: ; ;	 N [[=>  ? r   r  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
TestLinprogIPSpecificiW  r   c                    [         (       a  SSS.nO[        (       a  SSS.nOSSSS.n[        SS5      u  p#n[        XBX0R                  US9n[        XBX0R                  S9n[        UR                  UR                  SS	S
S9  g )NTrk  Frs  re   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r*   )has_cholmodr  rb   r
   r   r   r0   )r   r   rR   rS   rT   r{  r|  s          r   test_solver_select(TestLinprogIPSpecific.test_solver_select]  sz    ;!%48G[!%59G!%5UKG2r"aqqgNqq=$(( J"	0r   c                 T    S/nS/n[        XU R                  SSS.S9n[        USS9  g )Nr7   r  FT)rD  r   rX  r   )r
   r   r5   re  s       r   )test_unbounded_below_no_presolve_original?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originall  s8    D![[+0dCE 	,r   c                 d    [        SS5      u  pn[        X1X R                  SS0S9n[        USS9  g )Nre   r   Tr   r   r   r   r   s        r   test_cholesky#TestLinprogIPSpecific.test_choleskyu  s6    2r"aaa)4027r   c           
      2   [        SS5      u  pn[        5        nUR                  [        S5        UR                  [        S5        UR                  [
        S5        [        X1X R                  SSS.S9nS S S 5        [        WSS	9  g ! , (       d  f       N= f)
Nre   r  r  r  T)ipr   r   r   r   )	rb   r   r+  rY  r   r   r
   r   r5   )r   rR   rS   rT   r,  r   s         r   test_alternate_initial_point2TestLinprogIPSpecific.test_alternate_initial_point|  s{    2r"a CJJ~'CDJJ(GHJJ}&AB!!KK)-t"<>C	 ! 	7 ! s   AB
Bc                 F   S/nS/S//nSS/nS/S/S//n/ SQn[        5        nUR                  [        5        UR                  [        S5        [	        XX4U[
        U R                  S	S
0S9nS S S 5        [        WR                  (       + S5        g ! , (       d  f       N*= f)Nr'   r   r'  r   r~   rz   r  r  rD  Fr   r   )	r   r+  rY  r   r
   rs   r   r   r   rp  s           r   r  #TestLinprogIPSpecific.test_bug_8664  s    CaSz1vbTA3 CJJ~&JJ(GH!4tV!%z56IKC !
 	CKK!?@ ! s   A
B
B r   N)r  r  r  r  r   r  r  r  r  r  r  r   r   r   r  r  W  s!    F0-8
8Ar   r  c                   B    \ rS rSr0 rS rS rS rS rS r	S r
S rS	rg
)TestLinprogRSCommoni  c                 0    [         R                  " S5        g r  r  r   s    r   r  %TestLinprogRSCommon.test_cyclic_bland  r  r   c                     [        5       u  pp4pVn[        XX4U[        U R                  U R                  US9	n[        XUS9  [        UR                  S5        g Nr   r   x0r   r   r   r
   rs   r   r   r5   r   r   r  s	            r   "test_nontrivial_problem_with_guess6TestLinprogRSCommon.test_nontrivial_problem_with_guess  M    4F4H1T6at4![[$,,6K6BSWWa r   c                     [        5       u  pp4pVn/ SQn[        XX4XXU R                  U R                  US9	n	[	        XUS9  [        U	R                  S5        g )N)r   r   r   r   r  r   r   r   r
   r   r   r5   r   r   
r   rT   rm   rn   ro   rp   r   r   rs   r   s
             r   0test_nontrivial_problem_with_unbounded_variablesDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variables  sP    4F4H1T6Fat4![[$,,6K6BSWWa r   c                     [        5       u  pp4pVn/ SQn[        XX4XXU R                  U R                  US9	n	[	        XUS9  [        U	R                  S5        g )N)r  r   Nr   r  g333333?r  r   r   r  r  s
             r   .test_nontrivial_problem_with_bounded_variablesBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variables  sP    4F4H1T6<at4![[$,,6K6BSWWa r   c                     [        5       u  pp4pVnS/n[        R                  " / SQ5      nSn/ SQn[        XX4XXU R                  U R
                  US9	n	[        XUS9  [        U	R                  S5        g )Nr'   )gibl3g%G/?r   r  g@Q$@)r   r  r   r  r  r   r   )	r   r:   rD   r
   r   r   r5   r   r   r  s
             r   8test_nontrivial_problem_with_negative_unbounded_variableLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variable  sk    4F4H1T6s67?at4![[$,,6K6BSWWa r   c                     [        5       u  pp4pVn/ SQn[        XX4U[        U R                  U R                  US9	n	[        U	R                  S5        g N)r   r   r#   rg   r  ry   r   r
   rs   r   r   r   r   
r   rT   rm   rn   ro   rp   r   r   	bad_guessr   s
             r   &test_nontrivial_problem_with_bad_guess:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guess  H    4F4H1T6!	at4![[$,,9NSZZ#r   c           	         [        S5      u  pn  n[        R                  R                  " UR                  6 n[        5        nUR                  [        S5        UR                  [        S5        UR                  [        5        [        X1X R                  S9n[        X1X R                  UR                  S9n[        X5-   XU R                  UR                  S9n	S S S 5        [        WSS9  [        UR                  S5        [        W	5        [!        U	R                  WR                  :  5        g ! , (       d  f       N\= f)	Nr#   r  r  )ro   rp   r   )ro   rp   r   r  rY  r   r   )rU   r:   r;   rG   rH   r   r+  r   rY  r   r
   r   r1   r5   r   r   r   )
r   rR   rS   rT   r[  r	  r,  r   r|  res3s
             r   %test_redundant_constraints_with_guess9TestLinprogRSCommon.test_redundant_constraints_with_guess  s    $QaAIINNAGG$ CJJ(ABJJ~'BCJJ}%!!KK@C11[[SUUKD15qOD ! 	+6TXXq!377"# ! s   BD//
D=r   N)r  r  r  r  r   r  r  r  r  r  r  r  r  r   r   r   r  r    s*    G8!!!	!$$r   r  c                       \ rS rSrSS0rSrg)TestLinprogRSBlandi  pivotr  r   Nrl  r   r   r   r  r    s     Gr   r  c                   "    \ rS rSrSr0 rS rSrg)TestLinprogHiGHSSimplexDuali  r   c                    [        5       u  pp4[        XX4U R                  U R                  S9n[	        UR
                  S5        [        UR                  SL5        [        [        R                  " UR                  S:  5      5        [        [        R                  " UR                  U VVs/ s H  u  pgUc  [        R                  OUPM     snn:*  5      5        [        [        R                  " UR                  U VVs/ s H  u  pgUc  [        R                  * OUS-
  PM      snn:  5      5        gs  snnf s  snnf )z
The scaled model should be optimal, i.e. not produce unscaled model
infeasible.  See https://github.com/ERGO-Code/HiGHS/issues/494.
)rm   rn   rs   r   r   r   Ngưr  )r   r
   r   r   r   r   r   r1   r:   allr   rh   )r   rT   rm   rn   r   r   rq   rr   s           r   test_lad_regression/TestLinprogHiGHSSimplexDual.test_lad_regression  s    12a![[$,,@SZZ#T!"syy5()*suu/3!5/3VR ,.:2!=/3!5 5 6 	7suu/3!5/3VR -/J"&&BI!E/3!5 5 6 	7!5!5s   ,!D4 %D:r   N)r  r  r  r  r   r   r  r  r   r   r   r  r    s    FG7r   r  c                       \ rS rSrSr0 rSrg)TestLinprogHiGHSIPMi 	  r  r   N)r  r  r  r  r   r   r  r   r   r   r  r   	  s    FGr   r  c                   ~   \ rS rSrSr0 r\R                  R                  S5      \R                  R                  \
R                  S:  =(       a    \R                  " 5       S:H  SSS9S	 5       5       rS
 rS rS rS r\R                  R&                  S 5       r\R                  R&                  S 5       rS rS rSrg)TestLinprogHiGHSMIPi
	  r   rd   l        LinuxFzgh-16347)rP  runr  c           	      ~   Sn[        U5      u  p#pEnS/[        U5      -  nS/[        U5      -  n[        US-  X#UU R                  US9n	UR	                  5       U	R
                  -  R                  US-  X5      n
[        R                  " U
SS9n[        R                  R                  UR                  SS9U5        [        R                  R                  UR                  SS9U5        [        R                  R                  [        R                  " U5      R                  5       U5        [        R                  R                  [        R                  " US S 2S S S24   5      R                  5       U5        [        R                  R                  U	R
                  [        R                  " U	R
                  5      S	S
9  g )Nr'   r   r   r   rT   ro   rp   rs   r   r   r   r  r7   r  r4  )rU   r   r
   r   rC   r1   r>   r:   r  r  r   diaground)r   rI   rR   rS   rT   rL   rK   rs   r   r   ssquares               r   	test_mip1TestLinprogHiGHSMIP.test_mip1	  sL    *1oa!CF"cCFl!!F![[kC __&//1a;"


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


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


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


""2776!TrT'?#;#?#?#A1E


""355"((355/"Fr   c           	         [         R                  " SS/SS//5      n[         R                  " SS/5      n[         R                  " SS/5      * n[         R                  " S[         R                  4/[        U5      -  5      n[         R                  " U5      n[        X1X$U R                  US	9n[         R                  R                  UR                  SS/5        [         R                  R                  UR                  S
5        g )Nr   r   r~   rd   r7   r  r   r   r  r{   )r:   rD   rh   r   	ones_liker
   r   r  r   r1   r0   r  s          r   	test_mip2TestLinprogHiGHSMIP.test_mip2(	  s     xx!R2r(+,xxR!XXq!fArvv;-#a&01ll1o4![[kC 	

""3551a&1


""377B/r   c           	      &   [         R                  " SS/SS/SS//5      n[         R                  " / SQ5      n[         R                  " SS/5      * nS[         R                  4/[        U5      -  nS/[        U5      -  n[	        X1X$U R
                  US9n[         R                  R                  UR                  S5        [         R                  " UR                  SS/5      (       d+  [         R                  " UR                  SS/5      (       d   eg g )	Nr7   r   r#   r   r  r   r  r   )r:   rD   rh   r   r
   r   r  r   r0   r  r1   r  s          r   	test_mip3TestLinprogHiGHSMIP.test_mip3;	  s     xx"a1a&1a&12xx$XXq!fbff+Q'cCFl4![[kC 	

""377B/{{3551a&))R[[A-G-GGG-G)r   c           	         [         R                  " SS/SS/SS//5      n[         R                  " / SQ5      n[         R                  " SS/5      nS[         R                  4/[        U5      -  nSS/n[	        X1X$U R
                  US	9n[         R                  R                  UR                  S
S/5        [         R                  R                  UR                  S5        g )Nr7   r   r   r   r   )r  ire   rv   r   r  g      @r}   ;   )
r:   rD   rh   r   r
   r   r  r   r1   r0   r  s          r   	test_mip4TestLinprogHiGHSMIP.test_mip4L	  s     xx"bB8aV45xx&HHaVbff+Q'!f4![[kC 	

""3553(3


""377B/r   c                    [         R                  " / SQ/5      n[         R                  " S/5      n[         R                  " / SQ/5      n[         R                  " S/5      n[         R                  " / SQ5      nS[         R                  4S[         R                  4S/n/ SQn[        XQX#UX`R                  US	9n[         R
                  R                  UR                  / S
Q5        [         R
                  R                  UR                  S5        UR                  SS 5      c   eUR                  SS 5      c   eUR                  SS 5      c   eg )Nr  r}   )r'   r   r   r  )r{   r   r7   r   r   rG  )rT   rm   rn   ro   rp   rs   r   r   )r   ry   r   imip_node_countmip_dual_boundmip_gap)
r:   rD   rh   r
   r   r  r   r1   r0   rL  )	r   rm   rn   ro   rp   rT   rs   r   r   s	            r   	test_mip5TestLinprogHiGHSMIP.test_mip5\	  s    xx$xx}xx$xx~HH\"bff+266{F34#KK"-/ 	

""355)4


""377C0 ww'.:::ww'.:::wwy$'333r   c           	      `   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ5      nS[         R                  4/S-  nS	/S-  n[        X1X$U R                  US
9n[         R
                  R                  UR                  S5        g )Nr	  r  r  r  r  r#   r  r  '   r  r	  r  r  r  r
  r  r  r  r  r  r  &   r  r  )   r  r  r  r  r  r  r  i  i(  i:,  i/  r   rd   r  r  r}   r'  r}   r#   r   rv   r   r  i>  )r:   rD   rh   r
   r   r  r   r0   )r   ro   rp   rT   rs   r   r   s          r   	test_mip6TestLinprogHiGHSMIP.test_mip6t	  s     xx8999; < xx34HH01bff+qc!e4![[kC 	

""377D1r   c                 R   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ5      nS[         R                  4/S-  nS	/S-  n/ S
Qn/ nU HC  n[        U[        [
        XX@R                  USU0S9	n	U	S   n
X::  d   eUR                  U
5        ME     [         R                  " [         R                  " U5      5      n[         R                  " US:  5      (       d   e[         R                  " US:H  5      (       a   eg )Nr  r  r  r  r  r  r   rv   r   )rg   g      ?g{Gz?r  mip_rel_gap)	rT   rm   rn   ro   rp   rs   r   r   r   r  )r:   rD   rh   r
   rm   rn   r   rB   diffflipr  )r   ro   rp   rT   rs   r   mip_rel_gapssol_mip_gapsr   r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdown-TestLinprogHiGHSMIP.test_mip_rel_gap_passdown	  s   
 xx8999; < xx34HH01bff+qc!e/'KADt$!'&1#0+">@C  	NM !///. (" GGBGGL12	vvi1n%%%%66)q.)))))r   c                 :   [         R                  " / SQ5      n[         R                  " SS/SS/SS/SS//5      n[         R                  " / SQ5      n[        XUSS9n[         R                  R	                  UR
                  / SQ5        UR                  S:X  d   eg )	N)r   r   r7   r7   rg   rt  )r   r#   r   r#   r   )rs   r   r   )r   r   rt  r   r   )r:   rD   r
   r  r   r1   r   )r   rT   rs   r   r   s        r   test_semi_continuous(TestLinprogHiGHSMIP.test_semi_continuous	  s    
 HH%&C:SzC:SzJKhh|,a"-g? 	

""355.9zzQr   c           	         SS/nSS//nS/n[        XUSS/S9n[        XU[        R                  " SS/5      S9n[        XUSS9n[        UR                  UR                  5        [        UR                  UR                  5        g)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   r7   r   r   r   N)r
   r:   r  r   r1   )r   rT   rm   rn   r{  r|  r  s          r   test_bug_20584"TestLinprogHiGHSMIP.test_bug_20584	  s~    
 FQyvq$QFCq$BJJ1v<NOq$DATVVTVV$TVVTVV$r   r   N)r  r  r  r  r   r   r   r  r*  r  r  maxsizer  systemr  r  r  r  r  xslowr  r  r
  r  r  r   r   r   r  r  
	  s    FG[[2[[#++"7 #4(G3 (  *G	* 
G*0&H"0 40 [[2 2$ [[#* #*J%r   r  c                   d    \ rS rSrSS0r\R                  r\R                  r\R                  rSr	g)AutoscaleTestsi	  r  Tr   N)
r  r  r  r  r   r   rI  rV  rb  r  r   r   r   r  r  	  s-    D!G&44M&44M&44Mr   r  c                       \ rS rSrSrS rSrg)TestAutoscaleIPi	  r   c                 J    SU R                   S'   [        R                  U 5      $ )Nrj  ri  )r   r  rI  r   s    r   rI  TestAutoscaleIP.test_bug_6139	  s!    #U++D11r   r   N)r  r  r  r  r   rI  r  r   r   r   r  r  	  s    F2r   r  c                       \ rS rSrSrSrg)TestAutoscaleSimplexi	  r   r   Nr  r   r   r   r  r  	  s    Fr   r  c                   $    \ rS rSrSrS rS rSrg)TestAutoscaleRSi	  r   c                     [        5       u  pp4pVn[        XX4U[        U R                  U R                  US9	n[        XUS9  [        UR                  S5        g r  r  r  s	            r   r  2TestAutoscaleRS.test_nontrivial_problem_with_guess	  r  r   c                     [        5       u  pp4pVn/ SQn[        XX4U[        U R                  U R                  US9	n	[        U	R                  S5        g r  r  r  s
             r   r  6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess	  r  r   r   N)r  r  r  r  r   r  r  r  r   r   r   r  r  	  s    F!$r   r  c                       \ rS rSrSr\r\R                  r\R                  r	\R                  r
\R                  r\R                  rSrg)RRTestsi	  r   r   N)r  r  r  r  r   r   LCTr  test_RR_infeasibilityr  r\  r  	test_NFLCr  r  r   r   r   r!  r!  	  sE    F
CDD''N%%M66I11r   r!  c                       \ rS rSrSS0rSrg)	TestRRSVDi
  r   SVDr   Nrl  r   r   r   r&  r&  
  s    E"Gr   r&  c                       \ rS rSrSS0rSrg)TestRRPivoti
  r   r  r   Nrl  r   r   r   r)  r)  
  s    G$Gr   r)  c                       \ rS rSrSS0rSrg)TestRRIDi
  r   IDr   Nrl  r   r   r   r+  r+  
  s    D!Gr   r+  )NN:0yE>r-  )r   )r   rv   rz   r2  )Xr  r  r  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(   r5   rU   rb   rt   r   r   r   r  r  r   r   r   r   r   rm   rn   ro   rp   rs   r   filterwarningsr  r  r  r  r,  rD  rL  re  rj  rn  rr  r  r  r  r  r  r  r  r  r  r  r  r!  r&  r)  r+  r   r   r   <module>r<     sN     O O * 3 5 1 & 6  . 4
LFEK 6:$(.(?D6- 5 F4> 9 9> % %*#ZE 	A. A.R* 89,  : 89B' B :B 898' 8 :8:s$* s$v$ 3 $,(1 ($&;#6 &;\	  	  5^ 5 N^ N3>. 3>l .  , 89<A <A :<AH<$. <$~! !7"3 78+ ~% ~%L 895 5 :52n 2> $n $. 892 2 :2# #%' %"w "uO  K  Ks$   J> 
K >K
	K
KK