
    doi                    X   S r SSKrSSKrSSKrSSKrSSKJr  SSK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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(SVS jr)S r*SWS jr+S r,SXS jr-S r.S r/S r0S r1S r2S r3Sr4Sr5Sr6Sr7Sr8 " S S5      r9\Rt                  Rw                  S 5       " S! S"\95      5       r<\Rt                  Rw                  S 5       " S# S$\95      5       r=\Rt                  Rw                  S 5       " S% S&\95      5       r> " S' S(\95      r? " S) S*\<5      r@ " S+ S,\<5      rA " S- S.\<5      rB " S/ S0\=5      rC\(       a   " S1 S2\=5      rD\(       a   " S3 S4\=5      rE " S5 S6\=5      rF " S7 S8\=5      rG\Rt                  Rw                  S 5       " S9 S:5      5       rH " S; S<\>5      rI " S= S>\>5      rJ " S? S@\?5      rK " SA SB\?5      rL " SC SD5      rM\Rt                  Rw                  S 5       " SE SF5      5       rN " SG SH\N5      rO " SI SJ\N5      rP " SK SL\N5      rQ\Rt                  Rw                  S 5       " SM SN5      5       rR " SO SP\R5      rS " SQ SR\R5      rT " SS ST\R5      rUg! \ a    Sr GNCf = f! \ a    Sr GNEf = f)Yz"
Unit test for Linear Programming
    N)VisibleDeprecationWarning)assert_assert_allcloseassert_equalassert_array_less)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarningT)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     ]/var/www/html/land-ocr/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&   4   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_successr3   >   s}    
 ;;

|;s{{mDS!!Q L!	. y E!	. r   c           	         Uc  [         R                  R                  S5      OU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.
Nl   g-hP r   r   r%   dtype)nprandomdefault_rngarangereshapezerosrangecopyappendflattenarrayvstackfloatshape)nrngMnumbersr=   A_listb_listiA_rowjAbcs                r   magic_squarerR   R   s    :="))

 4
5#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

1771: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
l   -!j sizer   N)	r8   r9   r:   exponentialr=   r>   rC   hstackravel)mrF   rG   rQ   ArowbrowrN   j1AcolbcolrO   rP   s               r   lpgen_2dr_      s   
 ))

 4
5C
//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                 8   [         R                  R                  S5      nSu  p#nUR                  U5      S-
  nUR                  X445      S-
  nUR                  U5      S-
  nUR                  X$4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$ )Nl   ) )
      2         ?)r8   r9   r:   infrC   T)seedrG   m_eqm_ubrF   rQ   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genrq      s    
))


0CMD

1cA::ti $D::dCD::ti $D::dCD
**Q-B	AB ffWBSZZ\MFFBCJJL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)r5      r%   )ru      	   )r   r5   r   )ra   ru      )rv   r5   r!   r%   )rx   rv   rt   rv   )ry   r   r   )gk椀?gs?r   gkL?gqY:^@ )rQ   rj   rk   rl   rm   x_starf_stars          r   nontrivial_problemr      sI    AD DD4D5FFDf44r   c                    [         R                  R                  S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
l   p^vn? r   r   rT   h㈵>Nr   r5   NNr   N)r8   r9   r:   normalstandard_normalonesscipysparse	lil_arrayr>   tocscr=   )rg   rY   drF   rG   phiw_truer/   yrQ   rj   idxiirk   bndss                  r   l1_regression_probr      s    ))

 4
5C
**Q*
'C  #F

1aqf
%A'SZZ4aZ88A 	AAbqE<<!!1Q3*-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%   nitr/   r.   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   rx   r   r   r   ra   rs   r%   rj   rk   callbackmethod      2rv   r0   r1   r.   r/   r   r   )r8   rB   r	   r   r3   r   )selfr   rQ   rj   rk   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)Nrx   r   r   r   r   r   ekki-ekki-ekkirj   rk   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrj   rk   options)r8   rB   assert_raises
ValueErrorr	   pytestwarnsr
   )rQ   rj   rk   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 )Nrx   r   r   r   r   r   highsr   r   rv   r   )r8   rB   r	   r3   )rQ   rj   rk   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   rv   r   r   
time_limit皙?)rQ   rl   rm   rp   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   ra   highs-dsrQ   rl   rm   rp   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r5   )rp   r   z+The problem is infeasible. (HiGHS Status 8:r   r5   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,   
startswithrR   lenscipy.optimize._linprog_highsr   )r   r2   rO   rP   rQ   rI   rH   rp   r   r   r   r   r,   s                r   test_highs_status_messager   1  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   r5   r         rj   rk   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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# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rP\QR                  R                  \TR                  SO:H  SPSQ9SR 5       rVSSrWgT)ULinprogCommonTestsim  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_callbackz  s
    d#r   c                 d    [        SS5      u  pn[        X1X R                  SS0S9n[        USS9  g )Nrb   dispTrj   rk   r   r   fOr0   r_   r	   r   r3   r   rO   rP   rQ   r   s        r   	test_dispLinprogCommonTests.test_disp}  s6    2r"aaa%tn.);<r   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 )Nr5   r%   rx   r   r   rv   r   rx   N)rj   rk   rp   r   r   r   )r	   r   r   r3   )r   rQ   rO   rP   	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rl   rm   r   r   )r   	TypeErrorr	   r   r   )r   rQ   rl   rm   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   )r8   rB   r?   re   r	   rl   rm   r   r   r3   r   )r   rQ   rj   	b_ub_origrk   rp   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   )r8   rB   r?   re   r	   rj   rk   r   r   r3   r   )r   rQ   rl   	b_eq_origrm   rp   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   r3   r   rQ   rj   rk   rl   rm   rp   r   s           r   test_non_ndarray_args(LinprogCommonTests.test_non_ndarray_args  s\     Ewuwuat4![[$,,@qc:r   c                 D  ^  [         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	'   [        R                  " [
        5         U" XX6S
9  S S S 5        g s  snf ! , (       d  f       g = f)Nrx   r   r   r   r   r   c                 4   > [        XX#XETR                  US9  g Nr   r	   r   )rQ   rj   rk   rl   rm   rp   r   r   s          r   f2LinprogCommonTests.test_unknown_options.<locals>.f  s    AT;;9r   *   spamr   )NNNNNN)r8   rB   r   r   r   r
   )r   rQ   rj   rk   r  keyos   `      r   test_unknown_options'LinprogCommonTests.test_unknown_options  s    HHb"XAAA',0.2	9
 04||<|$,,s##|<&	\\/*a1 +* = +*s   B;B
B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[        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)Nr5   r   r!   r   r      r  r   rQ   rj   rk   rp   r   r   ?ffffff@ffffff)r8   rB   re   r   r   r   r
   r	   r   testingr   r/   r.   r   rj   rk   rQ   rp   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\\/*At!%+GC + 	

""3553*5


""377D1 +*s   D
Dc                   ^  SU 4S jjn[        [        U/ SQSS/S9  [        R                  " 5          [        R                  " S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   rQ   rj   rk   rl   rm   rp   r   s         r   r  1LinprogCommonTests.test_invalid_inputs.<locals>.f      AT;;>r   r   r   r!   r   r!   r%   rp   ignorezCreating an ndarray from ragged)r   r"  )r!   r%      r   r   r   r   )rj   rk   )rl   rm   _sparse_presolve)r   r   r!   )rj   rm   NNNNN)	r   r   warningscatch_warningsfilterwarningsr   r   r8   r=   )r   r  s   ` r   test_invalid_inputs&LinprogCommonTests.test_invalid_inputs  s8   	>
 	j!Y7GH$$&##;=VX*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   1D==
Ec           
        ^  SU 4S jjn[         R                  R                  S5      nSnSn[        R                  R                  X44SUS9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   l   QxD;d      rd   )densityrG   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r(  )r8   r9   r:   r   r   random_arrayr   column_stackr   r   r   r	   r   r   )r   r  rG   rY   rF   rl   x_validrQ   ro   rn   rp   rm   r   r   s   `             r   test_sparse_constraints*LinprogCommonTests.test_sparse_constraints  sI   	> ii##$45||((!#(F%%a("zz!}$zz!}$"*~;;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Sn[        XX0R                  SU0S9n[        XT5        [        UR                  U5        g )	Nr%   rs   r!   r   r   r   r   r%  r!   r5   r   r   r!         @rs   r   r5   r   rs   ra   r%   r   r   r5         iX  r!   r   r   )r	   r   r   r   r   )r   rQ   rO   rP   r   r   s         r   test_maxiterLinprogCommonTests.test_maxiter   sS    ! " 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   rp   r   r   r   r!  ))r%  r%  )r5   r5   )r!   r!   r  )r%  r5   r!   )r   r!   r   )r   r   r   r   r   r   r   r   r   rz   ))r%  )r   ra   )      @rJ  rl   rm   rp   r   r      )r   rz   rJ  )r   getr	   r   r3   r   r   r   do_presolver   s      r   test_bounds_fixed$LinprogCommonTests.test_bounds_fixed.  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 )	NrE  Tr   r&  rF  r   r!  ))r%  r   r   r"  )r   rM  r	   r   r   r   r   rN  s      r   test_bounds_infeasible)LinprogCommonTests.test_bounds_infeasibleN  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)NrE  Tr   r!  r   r"  c                 F   > [        XTR                  TR                  S9nU$ )NrF  r  )rQ   rp   r   r   s      r   g6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gv  s"    a%)[[$,,H
r   r#  rQ   rp   r   r   r   )r   rM  r   r8   re   r   r   RuntimeWarningr   
IndexErrorr	   r   r   r   )r   rO  simplex_without_presolverQ   bounds_1bounds_2rW  r   s   `       r   test_bounds_infeasible_2+LinprogCommonTests.test_bounds_infeasible_2e  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 )Nr5   r   r   )r	   r   r   r"   )r   rQ   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)r5   r   r5   r   r   r5   r   rF  rE  T)	r8   re   r	   r   r   r"   rM  r   r   r   rQ   rp   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   r5   r   r5   r   re  rF  )r   r   r5   r   r   r1   r0   )r8   re   r	   r   r   r3   rf  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   r5   r   r   r   r   irv   r   	r8   rB   r	   rl   rm   rp   r   r   r3   r   rQ   rj   rk   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 )Nrv   r!   r   r5   r   r   )r   r5   r5   r   r%  gUUUUUU?gUUUUUU?r   r	   rl   rm   rp   r   r   r3   ro  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   r1   )r	   rj   rk   rl   rm   r   r   r3   rf  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   r8   rB   r	   rj   rk   r   r   r3   r   rQ   rl   rm   rp   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!  rd   r   rj  r8   r   eyerB   re   r	   rj   rk   r   r   r3   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   r{  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   rj  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   rj  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 )Nr5   r%   rx   r   r   r6   rv   r   gm۶m&g$I$Ig%I$I@r   )
r8   rB   float64re   r	   rl   rm   r   r   r3   )r   rQ   rj   rk   r   r   rp   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   rz   r   r   r   )   r   r!   r   r   r   r   )r	   rl   rm   r   r   r   r   rQ   rj   rk   rp   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	   rj   rk   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%   rs   r   r  FrE  r   )r   r	   rl   rm   r   r   )r   rQ   rj   rk   rp   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                 :   Su  p[         R                  R                  S5      nUR                  U5      nSUS'   UR                  X4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"  l   ujo0o r   r   )r   r   r   r   r!   )ry   ra   r  )ry   Nr   r   g["r   )r8   r9   r:   r	   r   r   r3   )r   rY   rF   rG   rQ   rl   rm   rj   rk   rp   r   s              r   test_zero_column_1%LinprogCommonTests.test_zero_column_1'  s    ii##O4JJqM!zz1&!QT
zz!}~Bat4![[$,,@);<r   c                 ^   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#45      nSUS S 2S4'   UR	                  U5      nUR	                  X#4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-ipml   T-	r r$   r5   r   r   r   r   rE  Tr   )r   r   xfailr8   r9   r:   r	   r   r"   rM  r   r   )r   rG   rY   rF   rQ   rl   rm   rj   rk   rp   r   s              r   test_zero_column_2%LinprogCommonTests.test_zero_column_26  s   ;;33LLNii##$78JJqM!zz1&!QT
zz!}zz1&!QT
zz!}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	   rj   rk   rp   r   r   r3   r   rQ   rl   rm   r   s        r   test_zero_row_1"LinprogCommonTests.test_zero_row_1Q  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   rs  r   rj   rk   rQ   r   s        r   test_zero_row_2"LinprogCommonTests.test_zero_row_2Y  sD    9i0atT4![[$,,@+r   c                    Su  p[         R                  R                  S5      nUR                  U5      nUR                  X4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$   l   <l(Sr   r   rE  T)r8   r9   r:   r	   rj   rk   rp   r   r   r   rM  r   r   r   rY   rF   rG   rQ   rl   rm   r   s           r   test_zero_row_3"LinprogCommonTests.test_zero_row_3a  s    ii##$56JJqMzz1&!QT
zz!}atT![[$,,@3 <<J--!$ .r   c                    Su  p[         R                  R                  S5      nUR                  U5      nUR                  X4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 )Nr$   l   F- r   r   rE  T)r8   r9   r:   r	   rl   rm   rp   r   r   r   rM  r   r   )r   rY   rF   rG   rQ   rj   rk   r   s           r   test_zero_row_4"LinprogCommonTests.test_zero_row_4p  s    ii##$45JJqMzz1&!QT


1~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   rE  Tr   )
r	   rj   rk   rp   r   r   r   rM  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  r5   r   r   r   r  )r   r   r   r%   r   r   r   r   r   rE  Tr   	r	   rl   rm   r   r   r   rM  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   rd   r   )r	   rl   rm   r   r   r3   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 )Nr5   r   r   )r   r   rI  r   )r	   rl   rm   rp   r   r   r   ro  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%  rv   r   rE  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   r5   r   r   )	r8   rB   r	   rl   rm   rp   r   r   r"   ro  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   FrE  rY  r   r%  )r   r	   r   r   r   r"   )r   rQ   rp   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   r5   r5   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r5   r   r   r   )r   r   r   re  re  r   r   r   r5   N$   $The problem is (trivially) unboundedr8   rB   r	   rl   rm   r   r   r"   lowerr   r   r/   re   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   r5   r   r  r  )r   r   r   r   r   r   r  )r   r   r   re  re  )Nr   r   r   r5   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)r1  ra   r   r5   rG  )rb   r   r   )   rb   r   )r   r1  '  r   )r   r   r  gh㈵>Hz>)r1   r+   r*   rn  ro  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)ry   9   rw   g      8@)rd   g      r   rw   )rd   g      r  r   r  )r   r   r   r1  r   r   r   bland)r   r   r   r   rw  )r8   rB   r   itemsr	   rl   rm   rp   r   rM  r   r3   )	r   rQ   rj   rk   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4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'   [        R                  " 5          [        R
                  " SS[        5        [        U[        [        XV[        U R                  U R                  S9nS S S 5        [        W5        g ! , (       d  f       N= f)	N)ra   ra   l   $*P r   r   r5   r$  A_eq does not appear...r   )r8   r9   r:   r)  r*  r+  r
   r	   rj   rk   rp   r   r   r   r  s           r   $test_remove_redundancy_infeasibility7LinprogCommonTests.test_remove_redundancy_infeasibility(  s     ii##O4JJqMzz1&!zz!}$r1u+oRURB$$&##3_F!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	   rp   r   r   r3   	r   rQ   rj   rk   rl   rm   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[        R                  " 5          [        R                  " SS[        5        [        R                  " SS[
        5        [        R                  " S[        5        [        X1U[        [        [        U R                  U R                  S9nS S S 5        [        WSS9  g ! , (       d  f       N= f)Nrb   r$  $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )r_   r)  r*  r+  r
   rZ  simplefilterr   r	   rl   rm   rp   r   r   r3   r  s        r   test_lpgen_problem%LinprogCommonTests.test_lpgen_problemE  s     !R(A$$&##@/S##5~G!!(M:!4tV!%dllDC ' 	);< '&s   BB;;
C	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[         R                  " 5          [         R                  " S[        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%   rw      r%   r!   rs   rz   r   rL        re  r   )r      i!   r   r   ir$  r   i  ư>r  )r0   r+   r*   )r)  r*  r  r   r	   rj   rk   rp   r   r   r3   )r   rQ   rF   prl   rm   r   s          r   test_network_flow$LinprogCommonTests.test_network_flowU  s2    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 +$$&!!(M:!T4V!%dllDC ' 	4dC	 '&s   9A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[         R                  " 5          [        (       a  [         R                  " S	[        5        [         R
                  " S	S
[        5        [         R
                  " S	S[        5        [         R
                  " S	S[        5        [         R                  " S	[        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%  re  )r|   r   r   r%   r$  scipy.linalg.solve
Ill...r  Solving system with option...r   r  r   )r)  r*  has_umfpackr  r   r+  rZ  r
   r   r	   rj   rk   r   r   r3   )r   rQ   rp   rF   r  rl   rm   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	
 $$&{%%h?##6H##3_F##9?L!!(M:!T4V!%dllDC ' 	, '&s   	CD
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   rx   r|   )r!   r   r   )r   r%  r!   ra   rL  r   ir   rs  ro  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 )Nr:  r;  r<  r>  r?  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r0   r1   r+   r*   r  r  s        r   test_enzo_example$LinprogCommonTests.test_enzo_example  sV     ! " atT![[$,,@"@!	.r   c                 D   / SQn/ SQ/ SQ/ SQ/ SQ/ SQ/n/ SQn[         R                  " 5          [         R                  " S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%)r5   r5   r5   r   r   r   )r   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  r   gRQ)r  g?        r  r   r  r   )r)  r*  r+  r
   r	   rj   rk   rp   r   r   r3   r  s        r   test_enzo_example_b&LinprogCommonTests.test_enzo_example_b  s    /%""""	$
 *$$&##3_F!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 )Nrb   r   r   r   r   r   )r8   r   pir;   rC   cossinr	   rj   rk   rp   r   r   r3   r=   )r   rY   rQ   tmprl   rm   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 )Nrc   r   r   r  r   r   )r8   r   r"  r;   r#  r$  rC   r	   rj   rk   rp   r   r   r"   )	r   rY   rQ   r%  row0row1rl   rm   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 )Nrc   r   r   FrE  r   )r8   r   r"  r;   rC   r#  r$  r   r	   rj   rk   rp   r   r   )	r   rY   rQ   r%  rl   rm   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?r1  r1  r1  )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   g      4@)r   r   r5   r   r5   r   )r   r   r5   r   r5   r   r   r   g>)r0   r1   r+   )r8   rB   r	   rp   r   r   r3   
zeros_liker   rQ   rj   rk   rl   rm   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   rj   rk   rl   rm   rp   r   r   r   z%Optimization terminated successfully.gdy=r+   )eqlinineqlinr  upper	marginalsresidual)rq   r	   r   r   r   r   r   r   r,   r   r/   r.   r   r   keysr   r8   ndarray)	r   rQ   rj   rk   rl   rm   rp   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[        R                  " 5          [        R                  " S#S$[
        5        [        R                  " S#S%[        5        [        R                  " S#[        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   r1  rC  rC  rC  rC  rC  r     rD  rD  rD  rD  rD  r   r   r   r   r   r   gqq?     g)r   gQr   r   rx   r   r   r   r5   r5   r   r5   r5   r   r   r   r   r   r   r   r   g333333rx   r5   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   gףp=
?r   gffffff?g @)r  r   r   r1  r1  r1  r1  r1  r1  rE  rE  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   r   r   r   r   r   r   r   r   r   r   r$  r   r  r   g^Zr   )r8   rB   r)  r*  r+  r
   rZ  r  r   r	   rl   rm   r   r   r3   )	r   rp   r  rW  hrj   rk   rQ   r   s	            r   test_bug_5400 LinprogCommonTests.test_bug_5400  sb   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$$&##@/S##5~G!!(M:!4tV!%dllDC ' 	)<= '&s   ;A?G
G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  rK  g      @rF  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r%  g@r%  r   r8   rB   r	   r   r   r3   )r   rQ   rl   rm   rj   rk   rp   r   s           r   test_bug_6139 LinprogCommonTests.test_bug_6139H  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[        R                  " 5          [
        (       a  [        R                  " S[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " S[        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   rR  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?r  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?rQ  rd   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r  g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?r$  z%Solving system with option 'cholesky'r   r  r   gV)
rX  rS  rT  r  rQ  rd   rU  rV  rY  rW  r   r  r   r   )r8   rB   rf   r)  r*  r  r  r   r+  r
   rZ  r   r	   r   r   r3   r   r/   )r   rl   rm   rj   rk   rp   rQ   r   r0   r1   r+   s              r   test_bug_6690 LinprogCommonTests.test_bug_6690^  s   
 xx@ABxx!xx4*-9.
  xx9:MH
  1 	 HH   $$&{%%h?##A?T##@/S##5~G!!(M:!4t!%dllDC ' %HH G H	J &A,-suu5#%%1!45+ '&s   B7G''
G5c                 j   [        S5      u  pn  n[        R                  " 5          [        R                  " SS[        5        [        R                  " SS[
        5        [        R                  " S[        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  r   `4?r   r   )rR   r)  r*  r+  r
   rZ  r  r   r	   rj   rk   rp   r   r   r3   r   dotr/   r   r8   r=   rU   )r   rl   rm   rQ   _r   r0   s          r   test_bug_7044 LinprogCommonTests.test_bug_7044  s    
 +1oAq!$$&##3_F##5~G!!(M:!T4V!%dllDC ' )5."((355::.5suu= '&s   BD$$
D2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)	r5   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@rc  g     @h@g     {g      Zg     z)	r   g     @g     8@g     v@g     b@g     ؉g     `@g     ȃ@g     r@)	r  r          rd  rd  rd  rd  rd  rd  )	r  rd  r   rd  rd  rd  rd  rd  rd  )	r  rd  rd  r   rd  rd  rd  rd  rd  )	r  rd  rd  rd  r   rd  rd  rd  rd  )	r  rd  rd  rd  rd  r   rd  rd  rd  )	r  rd  rd  rd  rd  rd  r   rd  rd  )	r  rd  rd  rd  rd  rd  rd  r   rd  )	r  rd  rd  rd  rd  rd  rd  rd  r   )	r  r   r  r  r  r  r  r  r  )	r  r  r   r  r  r  r  r  r  )	r  r  r  r   r  r  r  r  r  )	r  r  r  r  r   r  r  r  r  )	r  r  r  r  r  r   r  r  r  )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r   r  )	r  r  r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   )	r  r   r   r   r   r   r   r   r   r   r   rw   r   ghb$[@r  r0   r+   rL  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[
        R                  " 5          [
        R                  " SS	[        5        [
        R                  " S[        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  )rk  r   r   rj  r   )ri  r   r   rl  r   r   r   r   r$  r  r   tolg&.>绽|=r   g r  re  )r8   rB   r=   rE   r   r)  r*  r+  rZ  r  r   r	   rl   rm   r   r   rM  r&   r3   )r   rj   rk   rQ   rp   r   s         r   test_bug_8174 LinprogCommonTests.test_bug_8174  s    xx00%%	' (
 xx

1&WWTZZ]##DJJqM)$$&##5~G!!(M:!4tV!%dllDC	 ' <<E4(50T[[I5M5c:C-@tL '&s   A#E
Ec                 v   [         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[        R                  " 5          [
        (       a  [        R                  " S[        5        [        R                  " S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   rz   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r5   )r  r   r   r   r   r   gUUUUUU)r   rP  r   r   r   r   )r   r   r  r   r   r   rr  r1  r   r$  r  r   g?E@r   )r8   rB   identityr)  r*  r  r  r   r+  r
   r	   rp   r   r   r3   r3  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$$&{%%h?##3_F!4tV!%dllDC ' 	)9: '&s   .A)D**
D8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)rz   r   r|         ?rw  )r%         @rw  r         )r   r   r   r=  rd   )r!   r  r%   g      )ru   )r5   g      @r   ry  r   )rx  r   g      r5   g      #@)r   r   r   r   r   )rj   rk   r   r   )r   r   r	  gUUUUUU@gUUUUUU#@rw  )r8   rB   r	   r   r   r3   ro  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[         R                  " 5          [        (       a  [         R                  " S	[        5        [         R
                  " S	S
[        5        [         R                  " S	[        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'   [         R                  " 5          [        (       a  [         R                  " S	[        5        [         R
                  " S	S
[        5        [         R                  " S	[        5        [        XU[        [        UU R                  U R                  S9nS S S 5        Sn[        WXXS9  [        WXXS9  g ! , (       d  f       N= f! , (       d  f       N6= f)N)ry   ra   rv   r!   )rs   r{   r|   rv   )r{   rs   r%   rt   )r|   r%   rs   r|   )r!   rx   rx   ry   )rw   r}  r|   )r   r   r   r   g      B@r$  r  r   )r   r   r5   r   r   r   r   r   )r0   r*   )r)  r*  r  r  r   r+  rZ  r   r	   rl   rm   r   r   r@   r3   )	r   rQ   rj   rk   rp   r0   res1res2r*   s	            r   test_bug_8662 LinprogCommonTests.test_bug_8662  sZ     " =#$$&{%%h?##5~G!!(M:1D$f"&++t||ED ' 	M"A q	$$&{%%h?##5~G!!(M:1D$f"&++t||ED ' +A+A1 '& '&s   B	F)B	F:)
F7:
G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   ru   rt   r   r   r   g۶m۶m?gI$I$@rj  )r	   rj   rk   r   r   r3   r|  s         r   test_bug_8663 LinprogCommonTests.test_bug_86631  s[     FByt\*atT![[$,,@4yfEr   c                 d   S/nS/S//nSS/nS/S/S//n/ SQn[         R                  " 5          [         R                  " S[        5        [         R                  " S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{   rw   r!   r   ra   r$  r  r   )r)  r*  r  rZ  r+  r
   r	   rp   r   r   r   r3  s          r   test_bug_8664 LinprogCommonTests.test_bug_8664<  s     CaSz1vbTA3$$&!!(N;##9?L!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   r5   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   re  re  r   r   N)r8   rB   r	   rl   rm   r   r   r3   r   r/   r.   r  s         r   test_bug_8973 LinprogCommonTests.test_bug_8973M  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   rj  N)	r8   r=   rB   r	   rl   rm   r   r   r3   r  s         r   test_bug_8973_2"LinprogCommonTests.test_bug_8973_2^  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   r5   r%   rx   r   rv   r   r   Tr   ra   r   rj  N)
r8   r=   rB   updater   r	   rl   rm   r   r3   )r   rQ   rj   rk   rp   r  r   s          r   test_bug_10124!LinprogCommonTests.test_bug_10124n  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[        R
                  " 5          [        R                  " S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   )      ra         f   r   r   r%   Naxisr$  r  r   )   \   r  r  r   ra   r  rj  )r8   rB   concatenater=   r)  r*  r+  r
   r	   rj   rk   rp   r   r   r3   )r   rl   rm   rQ   r   s        r   test_bug_10349!LinprogCommonTests.test_bug_10349  s    
 xx++++++- . xx56NNAq"((1+.T:$$&##3_F!T4V!%dllDC '
 	'@bQ '&s   AC$$
C2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        [        R
                  " 5          [        R                  " SS[        5        [        (       a  [        R                  " S[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " SS[        5        [        R                  " S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
)       rd  r  rd  r  rd  rd  rd  rd  rd  rd  rd  rd  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  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  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...An ill-conditioned...r   Nl )r   r   r  r   r)  r*  r+  r
   r  r  r   rZ  r   r	   rj   rk   rp   r   r.   )r   rQ   rl   rm   r  r   s         r   test_bug_10466!LinprogCommonTests.test_bug_10466  sl    NDDDEDDDDDD	F 
 {{%%g..d#A	$$&##9?L{%%h?##6H##9>K##3^E##8.J##5}F##1=B !T4V!%a9C% '( 	-) '&s   ?DF..
F<r}   N)X__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r  r  r  r,  r7  rB  rP  rS  r_  rb  rg  rk  rp  rt  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r+  r.  r4  r@  rH  rM  rZ  r`  rf  ro  rt  rz  r  r  r  r  r  r  r  r   markskipifsysplatformr  __static_attributes__r}   r   r   r   r   m  s   $=	.@));2 2$O:B'%@%.')R
%F
@F
/;G;GGN   "=%6,,%%
%,%.	 %# A(A(
L92 *C= D* -D	..(B$	C" #"D.6>p:,,6\>('@RM0;2?"$BL	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   rH  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   rH  r  r  r  r}   r   r   r  r    s    F$888r   r  c                       \ rS rSrS 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       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   rx   r   r   r   r   r   r   r   r   rv   r   )r8   rB   r   NotImplementedErrorr	   r   r3   )r   r   rQ   rj   rk   r   s         r   r   LinprogHiGHSTests.test_callback  sn    	HHb"XAAA')7At!++	7akkB1a&Ar   r   r   r5   r   rE  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                    ^  U 4S jnUR                  T R                  5        [        R                  " [        5         U" US9  S S S 5        g ! , (       d  f       g = f)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   r  s   `  r   test_invalid_option_values,LinprogHiGHSTests.test_invalid_option_values  s8    	<t||$\\/*g +**s   A
Ac           	          [        S[        R                  R                  S5      S9u  pn  nSn[	        X1UXPR
                  U R                  S9n[        UR                  S:H  U R
                  S:g  5        g )Nr%   i(! rG   r   rK  r   r  )	rR   r8   r9   r:   r	   r   r   r   crossover_nit)r   rl   rm   rQ   r_  rp   r   s          r   test_crossover LinprogHiGHSTests.test_crossover  sg    *1"))2G2G2PQAq!a#KKO 	S&&!+T[[K-GHr   ra   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   rg   r7  c           
      J   > [        TTU TTTTR                  S9R                  $ Nr   r	   r   r.   )r/   rl   rj   rm   rp   rQ   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  )r/   rl   rj   rk   rp   rQ   r   s    r   f_beq/LinprogHiGHSTests.test_marginals.<locals>.f_beq2  s(    1dD$6"&++//2s3r   c           
         > [         R                  " U T/5      R                  n[        TTTTTUTR                  S9R
                  $ r  r8   rB   rf   r	   r   r.   )	r/   rp   rl   rj   rm   rk   rQ   r   ro   s	     r   f_lb.LinprogHiGHSTests.test_marginals.<locals>.f_lb:  s@    XXq"g&((F1dD$f"&++//2s3r   r$  )invalidc           
         > [         R                  " TU /5      R                  n[        TTTTTUTR                  S9R
                  $ r  r  )	r/   rp   rl   rj   rm   rk   rQ   rn   r   s	     r   f_ub.LinprogHiGHSTests.test_marginals.<locals>.f_ubG  s@    XXr1g&((F1dD$f"&++//2s3r   )rq   r	   r   r   rf   r   r.   r   r:  r<  r9  r8   errstateisfiniter  r;  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrl   rj   rm   rk   rp   rQ   rn   ro   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  r7  r   -q=r8  )rq   r	   r   r   rf   r:  r<  r9  r;  r  r   )	r   rQ   rj   rk   rl   rm   rp   r   resids	            r   test_dual_feasibility'LinprogHiGHSTests.test_dual_feasibilityR  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  r7  r   )	rq   r	   r   r   r8   allcloser:  r<  r/   r  s           r   test_complementary_slackness.LinprogHiGHSTests.test_complementary_slackness`  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%  rv   rv   rz   rz   rs   rs   rw   rw   ra   r  r  r  r  r  r     r	  r  r  r  r  rL  rL  r  r  r  r     r
  r  r  r  r  r	  r	  rb   rb   rb   rb      r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )SrL  r  r
  r  r	  r  r  rb   r  r  r  r  r  r  r  r  r  r  r	  r   r       r!   r  r	  r%   r   r%   r   r  r  r   r  r   r  r  rL  r%  r%   r%  r%   r  r
  rv   r%  rv   r%  rb   r	  rz   rv   rz   rv   r  r  rs   rz   rs   rz   r  r  rw   rs   rw   rs   r  r  ra   rw   ra   rw   r  r  r  ra   r  ra   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  r6   )r  r
  )rE   N)rj   rk   rl   rm   rp   r   )r8   asarrayr  int32r   r   	csr_arrayoptimizer	   r   r/   linalgnormr9  r=  r   )r   
boundaries
eq_entries
eq_indizeseq_vars	eq_valuescoefficientsnp_eq_entriesnp_eq_indizes
np_eq_varsa_eqrm   rQ   resultr/   n_r_xn_rs                    r   test_bug_20336 LinprogHiGHSTests.test_bug_20336k  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  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                   :   ^  \ rS rSrS rS rS rU 4S j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   rH  'TestLinprogSimplexDefault.test_bug_5400      45r   c                 0    [         R                  " S5        g r4  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Nrm  r  r   r  r   r   r
   superro  r   	__class__s    r   test_bug_8174_low_tol/TestLinprogSimplexDefault.test_bug_8174_low_tol  >     	UEN+\\/*G!# +**   A
Ar  )
r  r  r  r  r1  rH  r8  r@  r  __classcell__r?  s   @r   r/  r/    s    66
$ $r   r/  c                   4   ^  \ rS rSrS rS rU 4S jrSrU =r$ )TestLinprogSimplexBlandi  c                     SS0U l         g )Nr  Tr  r   s    r   r1  $TestLinprogSimplexBland.setup_method  s    r   c                 0    [         R                  " S5        g r4  r  r   s    r   rH  %TestLinprogSimplexBland.test_bug_5400  r6  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r;  )	r   r  r   r   r-   r   r
   r=  ro  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  r1  rH  r@  r  rD  rE  s   @r   rG  rG    s    '6( (r   rG  c                     ^  \ 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U 4S jrS rS rSrU =r$ )TestLinprogSimplexNoPresolvei  c                     SS0U l         g )NrE  Fr  r   s    r   r1  )TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rs   linuxz"Fails with warning on 32-bit linux)	conditionr  c                 "   > [         TU ]  5         g r   )r=  rH  r>  s    r   rH  *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)Nrm  r  zlinprog status 4r   )r   r  r   r   r-   r=  rM  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 r4  r  r   s    r   r8  2TestLinprogSimplexNoPresolve.test_bug_7237_low_tol  r6  r   c                    > U R                   R                  SS05        [        R                  " [        5         [
        TU ]  5         S S S 5        g ! , (       d  f       g = fr;  r<  r>  s    r   r@  2TestLinprogSimplexNoPresolve.test_bug_8174_low_tol  rB  rC  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  r1  r8   intpitemsize	is_32_bitr  r  r   is_linuxr   r  r  rH  rW  r8  r@  r  r  r  rD  rE  s   @r   rO  rO    s    + 
##a'I||&&w/H[[(3  5 5 +6$;; ;r   rO  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=  rM  r>  s    r   rM   TestLinprogIPDense.test_bug_6139  s    
 	r   r}   )r  r  r  r  r   r   r  r  r  r  rM  r  rD  rE  s   @r   rh  rh    sD    G [[ K   	 r   rh  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   rm  rm    s    !t4r   rm  c                   $    \ rS rSrSSS.rS rSrg)TestLinprogIPSparseUmfpacki  TFrn  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   rq  rq    s    !u5	Nr   rq  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   rj  r>  s    r   rM  !TestLinprogIPSparse.test_bug_6139#       	r   Fails with ATLAS, see gh-7877c                 "   > [         TU ]  5         g r   r=  rZ  r>  s    r   rZ  !TestLinprogIPSparse.test_bug_6690-       	r   c                    [        S5      u  pn  nSn[        R                  " 5          [        (       a  [        R                  " S[
        5        [        R                  " SS[        5        [        R                  " SS[        5        U R                   Vs0 s H  ofU R                  U   _M     nnSUS'   [        U[        [        XUU R                  US9nS S S 5        S	n	[        WU	S
9  g s  snf ! , (       d  f       N = f)Nr!   r   r$  zMatrix is exactly singularr  FrE  r   r]  r   )rR   r)  r*  r  r  r   r+  r   r
   r   r	   rj   rk   r   r3   )
r   rl   rm   rQ   r_  rp   r  r  r   r0   s
             r   $test_magic_square_sparse_no_presolve8TestLinprogIPSparse.test_magic_square_sparse_no_presolve2  s    *1oAq!$$&{%%h?##68IK##9?L 48<<@<Cdll3''<A@!AjM!T4V!%a9C ' )5 A '&s   A-C0C+.(C0+C00
C>c                    [        S5      u  pn  n[        R                  " 5          [        R                  " SS[        5        [        R                  " SS[        5        U R
                   Vs0 s H  oUU R
                  U   _M     nnSnU H7  nXS'   [        U[        [        X[        U R                  US9n	Sn
[        XS	9  M9     S S S 5        g s  snf ! , (       d  f       g = f)
Nr!   r$  r  zInvalid permc_spec option)NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r]  r   )rR   r)  r*  r+  r
   r   r	   rj   rk   rp   r   r3   )r   rl   rm   rQ   r_  r  r  permc_specsr  r   r0   s              r   test_sparse_solve_options-TestLinprogIPSparse.test_sparse_solve_optionsG  s    *1oAq!$$&##3_F##5H37<<@<Cdll3''<A@7K *
",,atT%)[[!=0= * '&
 A '&s   AC-CACC
C#r}   )r  r  r  r  r   r   r  r  r  r  xfail_on_32bitrM  r  rZ  r  r  r  rD  rE  s   @r   ru  ru     s    5UCG[[ @   [[ !: ; ;	  [[=>  ? 6*> >r   ru  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$ )TestLinprogIPSparsePresolvei\  T)r   r'  r  rx  r  ry  c                 "   > [         TU ]  5         g r   rj  r>  s    r   rM  )TestLinprogIPSparsePresolve.test_bug_6139_  r|  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_infeasibilityi  s    LMr   r}  c                 "   > [         TU ]  5         g r   r  r>  s    r   rZ  )TestLinprogIPSparsePresolve.test_bug_6690l  r  r   r}   )r  r  r  r  r   r   r  r  r  r  r  rM  r.  r  rZ  r  rD  rE  s   @r   r  r  \  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	)
TestLinprogIPSpecificir  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 )NTrn  Frv  rb   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r(   )has_cholmodr  r_   r	   r   r   r.   )r   r   rO   rP   rQ   r~  r  s          r   test_solver_select(TestLinprogIPSpecific.test_solver_selectx  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 )Nr5   r  FT)rE  r   rY  r   )r	   r   r3   rf  s       r   )test_unbounded_below_no_presolve_original?TestLinprogIPSpecific.test_unbounded_below_no_presolve_original  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 )Nrb   r   Tr   r   r   r   r   s        r   test_cholesky#TestLinprogIPSpecific.test_cholesky  s7    2r"aaa)402);<r   c           
         [        SS5      u  pn[        R                  " 5          [        R                  " SS[        5        [        R                  " SS[
        5        [        R                  " SS[        5        [        R                  " SS[        5        [        X1X R                  SSS.S	9nS S S 5        [        WS
S9  g ! , (       d  f       N= f)Nrb   r$  r  r  r  r  T)ipr   r   r   r   )
r_   r)  r*  r+  rZ  r
   r   r	   r   r3   r   s        r   test_alternate_initial_point2TestLinprogIPSpecific.test_alternate_initial_point  s    2r"a$$&##6H##9?L##5}F##1=B !!KK)-t"<>C ' 	);< '&s   B	C
Cc                 t   S/nS/S//nSS/nS/S/S//n/ SQn[         R                  " 5          [         R                  " S[        5        [         R                  " S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{   rw   r  r$  r  rE  Fr   r   )r)  r*  r  rZ  r+  r
   r	   rp   r   r   r   r3  s          r   r  #TestLinprogIPSpecific.test_bug_8664  s    CaSz1vbTA3$$&!!(N;##9?L!4tV!%z56IKC	 ' 	CKK!?@ '&s   AB))
B7r}   N)r  r  r  r  r   r  r  r  r  r  r  r}   r   r   r  r  r  s!    F0-==$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	   rp   r   r   r3   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   r3   r   r   
r   rQ   rj   rk   rl   rm   r~   r   rp   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   r8   rB   r	   r   r   r3   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!   rd   r  rv   r   r	   rp   r   r   r   r   
r   rQ   rj   rk   rl   rm   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           	         [         R                  R                  S5      n[        SUS9u  p#n  nUR                  UR                  5      n[
        R                  " 5          [
        R                  " SS[        5        [
        R                  " SS[        5        [
        R                  " S[        5        [        XBX0R                  S9n[        XBX0R                  UR                  S9n[        XF-   X#U R                  UR                  S9n	S S S 5        [        WWR                   S	9  [#        UR$                  S
5        [        W	5        ['        U	R$                  UR$                  :  5        g ! , (       d  f       Nf= f)Nl   %4| r!   r  r$  r  r  )rl   rm   r   )rl   rm   r   r  r   r   )r8   r9   r:   rR   rE   r)  r*  r+  r
   rZ  r  r   r	   r   r/   r3   r.   r   r   r   )
r   rG   rO   rP   rQ   r_  r  r   r  res3s
             r   %test_redundant_constraints_with_guess9TestLinprogRSCommon.test_redundant_constraints_with_guess  s   ii##O4$QC0aAJJqww$$&##3_F##5~G!!(M:!!KK@C11[[SUUKD15qOD ' 	#''2TXXq!377"# '&s   B)E((
E6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}   Nro  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.
)rj   rk   rp   r   r   r   Ngưr  )r   r	   r   r   r   r   r   r/   r8   allr   re   )r   rQ   rj   rk   r   r   rn   ro   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   ra   l        LinuxFzgh-16347)rS  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   rQ   rl   rm   rp   r   r   r   r  r5   r  r8  )rR   r   r	   r   rA   r/   r<   r8   r  r  r   diaground)r   rF   rO   rP   rQ   rI   rH   rp   r   r   ssquares               r   	test_mip1TestLinprogHiGHSMIP.test_mip13	  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{   ra   r5   r	  r   r   r  rx   )r8   rB   re   r   	ones_liker	   r   r  r   r/   r.   r  s          r   	test_mip2TestLinprogHiGHSMIP.test_mip2M	  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 )	Nr5   r   r!   r   r  r   r  r   )r8   rB   re   r   r	   r   r  r   r.   r   r/   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 )Nr5   r   r|   r   r   )r  irb   rs   r   r  g      @rz   ;   )
r8   rB   re   r   r	   r   r  r   r/   r.   r  s          r   	test_mip4TestLinprogHiGHSMIP.test_mip4q	  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  rz   )r%   r   r   r  )rx   r   r5   r   r   rH  )rQ   rj   rk   rl   rm   rp   r   r   )r   rv   r   imip_node_countmip_dual_boundmip_gap)
r8   rB   re   r	   r   r  r   r/   r.   rM  )	r   rj   rk   rl   rm   rQ   rp   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   ra   r	  r
  rz   r%  rz   r!   r   rs   r   r  i>  )r8   rB   re   r	   r   r  r   r.   )r   rl   rm   rQ   rp   r   r   s          r   	test_mip6TestLinprogHiGHSMIP.test_mip6	  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   rs   r   )rd   g      ?g{Gz?r  mip_rel_gap)	rQ   rj   rk   rl   rm   rp   r   r   r   r  )r8   rB   re   r	   rj   rk   r   r@   diffflipr  )r   rl   rm   rQ   rp   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   r5   r5   rd   rw  )r   r!   r   r!   r   )rp   r   r   )r   r   rw  r   r   )r8   rB   r	   r  r   r/   r   )r   rQ   rp   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   r5   r   r   r   N)r	   r8   r  r   r/   )r   rQ   rj   rk   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   rM  rZ  rf  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      $ )Nrn  rm  )r   r  rM  r   s    r   rM  TestAutoscaleIP.test_bug_6139
  s!    #U++D11r   r}   N)r  r  r  r  r   rM  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}   Nro  r}   r   r   r)  r)  -
  s    E"Gr   r)  c                       \ rS rSrSS0rSrg)TestRRPivoti1
  r   r  r}   Nro  r}   r   r   r,  r,  1
  s    G$Gr   r,  c                       \ rS rSrSS0rSrg)TestRRIDi5
  r   IDr}   Nro  r}   r   r   r.  r.  5
  s    D!Gr   r.  )NN:0yE>r0  r   )r   )r   rs   rw   r1  )Vr  r  r  r)  numpyr8   numpy.exceptionsr   numpy.testingr   r   r   r   r   r   r   scipy.optimizer	   r
   scipy.optimize._numdiffr   scipy.sparse.linalgr   scipy.linalgr   scipy.sparser   r  scikits.umfpackr   ImportErrorr  sksparsesksparse.cholmodr   cholmodr   r   r"   r&   r3   rR   r_   rq   r   r   r   r   r   r   r   r   rj   rk   rl   rm   rp   r   r  r+  r  r  r  r  r/  rG  rO  rh  rm  rq  ru  r  r  r  r  r  r  r  r  r  r  r  r$  r)  r,  r.  r}   r   r   <module>r>     s        6. . * 3 5 1 &  . 4
LFEK 6:$(.(?D6- 5 F4>9>%*#ZE 	Z. Z.D+ 89,  : 89B' B :B 898' 8 :8:s$* s$v$ 3 $*(1 ("%;#6 %;Z	  	  5^ 5 N^ N9>. 9>x .  , 89CA CA :CAV?$. ?$D! !7"3 78+ ~% ~%L 895 5 :52n 2> $n $. 892 2 :2# #%' %"w "}P  K  Ks$   J 
J JJJ)(J)