
    -ii                       d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ ddlZddlZd
Z	 ddlmZ n# e$ r dZY nw xY wd
Z	 ddl Z ddl!m"Z# n# e$ r dZY nw xY wd Z$d Z%d Z&d Z'	 	 dYdZ(dZdZ)d Z*d[dZ+d Z,d\dZ-d Z.d Z/d Z0d Z1d  Z2d! Z3dZ4dZ5dZ6dZ7dZ8 G d" d#          Z9ej:        ;                    d$           G d% d&e9                      Z<ej:        ;                    d$           G d' d(e9                      Z=ej:        ;                    d$           G d) d*e9                      Z> G d+ d,e9          Z? G d- d.e<          Z@ G d/ d0e<          ZA G d1 d2e<          ZB G d3 d4e=          ZCer G d5 d6e=          ZDer G d7 d8e=          ZE G d9 d:e=          ZF G d; d<e=          ZGej:        ;                    d$           G d= d>                      ZH G d? d@e>          ZI G dA dBe>          ZJ G dC dDe?          ZK G dE dFe?          ZL G dG dH          ZMej:        ;                    d$           G dI dJ                      ZN G dK dLeN          ZO G dM dNeN          ZP G dO dPeN          ZQej:        ;                    d$           G dQ dR                      ZR G dS dTeR          ZS G dU dVeR          ZT G dW dXeR          ZUdS )]z"
Unit test for Linear Programming
    N)VisibleDeprecationWarning)assert_assert_allcloseassert_equalassert_array_less)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarningT)UmfpackWarningF)choleskyc                     t          | j         d           t          | j        |k     d           t          | j        dd           d S )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiters     g/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   "   sJ    O;<<<CK'!#NOOOQ JKKKKK    c                 ^    t          | j         d           t          | j        dd           d S )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler   (   s2    O;<<<Q DEEEEEr   c                 ^    t          | j         d           t          | j        dd           d S )Nr      z!failed to report unbounded statusr   r   s    r   _assert_unboundedr"   .   s2    O;<<<Q CDDDDDr   c                 `    t          | j         d           t          | j        dv d           d S )Nr   r      z%failed to report optimization failure)r   r   r   r   s    r   )_assert_unable_to_find_basic_feasible_solr&   4   s7     O;<<<CJ& "IJJJJJr   :0yE>c                     | j         s!d| j         d| j         }t          |          t	          | j        d           |t          | j        |d||           |t          | j        |d||           d S d S )Nzlinprog status z, message: r   z*converged to an unexpected objective valueerr_msgrtolatolz#converged to an unexpected solution)r   r   messageAssertionErrorr   r   funx)r   desired_fun	desired_xr+   r,   msgs         r   _assert_successr4   >   s    
 ; "D
DDs{DDS!!!Q L!	. 	. 	. 	. y E!	. 	. 	. 	. 	. 	. r   c           	      8   |t           j                            d          n|}| | dz  dz   z  dz  }t          j        | dz            | dz  z  dz   }|                    | dz  | |           }t          j        | dz  | | f          }g }g }t          | dz            D ]^}|                                }d||ddddf<   |                    |	                                           |                    d           _t          |           D ]n}t          |           D ]\}	|                                }d|dd||	f<   |                    |	                                           |                    d           ]ot          |           D ]k}|                                }|dd|ddf         |dd|ddf<   |                    |	                                           |                    |           lt          |           D ]k}|                                }|dddd|f         |dddd|f<   |                    |	                                           |                    |           l|                                }|ddt          |           t          |           f         |ddt          |           t          |           f<   |                    |	                                           |                    |           |                                }|ddt          |           t          d|  dz
  d          f         |ddt          |           t          d|  dz
  d          f<   |                    |	                                           |                    |           t          j
        t          j        |          t                    }
t          j
        |t                    }|                    |
j        d                   }|
||||fS )z
    Generates a linear program for which integer solutions represent an
    n x n magic square; binary decision variables represent the presence
    (or absence) of an integer 1 to n^2 in each position of the square.
    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_squarerS   R   s    :=")

 4
5
5
5#C	QTAXAi1ooA%)GooadAq))GHadAq\""EFF 1a4[[  

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

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

 AAAq)aaaAgemmoo&&&a JJLLE#*111eAhha+@#AE!!!U1XXuQxx
 
MM%--//"""
MM!JJLLE588U2rAvr2223 
!!!U1XXuR!a,,
,-
MM%--//"""
MM!
6""%000A
u%%%A

171:AaGQr   c                 T   t           j                            d          }|                    | |f           }t          j        | | |z  f          }t          j        |           }t          |           D ]}|dz   }d||||z  ||z  f<   || z  ||<   t          j        || |z  f          }t          j        |          }	t          |          D ]}|dz   }d|||d|f<   d|	|<   t          j        ||f          }
t          j        ||	f          }|
||                                fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    l   -!j sizer   N)	r9   r:   r;   exponentialr>   r?   rD   hstackravel)mrG   rH   rR   ArowbrowrO   j1AcolbcolrP   rQ   s               r   lpgen_2dr`      s9   
 )

 4
5
5C
//1v/
&
&&A8QAJD8A;;D1XX  U !QAb1f_a%Q8QAJD8A;;D1XX  UQ1WQ
	4,A
	4,Aa?r   c                 x   t           j                            d          }d\  }}}|                    |          dz
  }|                    ||f          dz
  }|                    |          dz
  }|                    ||f          dz
  }|                    |          dz
  }	|                    |           }
|                    |          }t           j         |
|
|                                 k     <   t           j        |||                                k    <   t          j        |
|f          j        }|||||	|fS )Nl   ) )
      2         ?)r9   r:   r;   infrD   T)seedrH   m_eqm_ubrG   rR   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genrr      s   
)


0
0CMD$

1cA::tQi  $D::dCD::tQi  $D::dCD
**Q--B	AB fWBrSZZ\\MFBrCJJLLYBx  "FdD$f,,r   c                  \    g d} g dg dg dg dg}g d}g dg}dg}g d	}d
}| ||||||fS )N)r6      r%   )rv      	   )r   r6   r   )rb   rv      )rw   r6   r!   r%   )ry   rw   ru   rw   )rz   r   r   )gk椀?gs?r   gkL?gqY:^@ )rR   rk   rl   rm   rn   x_starf_stars          r   nontrivial_problemr      ss    ANNNNMMD >>DOOD4D555FFdD$ff44r   rt   rx   d   c                     t           j                            d          }|                    dd||f          }|                    |          }|                    dd||f          }|||z  z  |                    dd|          z   }t          j        ||z             }	d|	d|<   t          j                            d|z  ||z   f          }
d}t          |          D ]P}||dd|f         z  |
|d|f<   d|
|||z   f<   d|z  |dd|f         z  |
|dz   d|f<   d|
|dz   ||z   f<   |dz  }Q|

                                }
t          j        d|z            }||ddd<   | |ddd<   d	g|z  d
g|z  z   }|	|
||fS )z
    Training data is {(x0, y0), (x1, y2), ..., (xn-1, yn-1)}
        x in R^d
        y in R
    n: number of training samples
    d: dimension of x, i.e. x in R^d
    phi: feature map R^d -> R^m
    m: dimension of feature space
    l   p^vn? r   r   rU   h㈵>Nr   r6   NNr   N)r9   r:   r;   normalstandard_normalonesscipysparse	lil_arrayr?   tocscr>   )rh   rZ   drG   rH   phiw_truer0   yrR   rk   idxiirl   bndss                  r   l1_regression_probr      s    )

 4
5
5C
**QA*
'
'C  ##F

1aq!f
%%A#'SZZ4aZ888A 	!AAbqbE<!!1Q3!*--D
CAhh  a2hS"1"WS!B$YS&1QQQU8+SUBQBYSUAbD[q::<<D8AaC==DDAJDAJ>!yk!m+DdD$r   c                    i fd}t          j        ddg          }ddgddgddgg}g d}t          ||||| j                  }t	          |d	dd
g           t          d         |d                    t          d         |d                    t          d         |d                    t          d         |d                    d S )Nc                 P   |                      d          }|                      d          }t          |                      d          dv            t          |                      d          t          d          v            t          t          |                      d          t                               t          t          |t
                               t          t          |t                               | d         d<   | d	         d	<   | d
         d
<   | d         d<   d S )Nr-   completephaser   r   r   r%   nitr0   r/   slackcon)popr   r?   
isinstanceintboolstr)r   r-   r   last_cbs      r   cbz!generic_callback_test.<locals>.cb   s    '')$$77:&&  F*+++!!U1XX-...
3775>>3//000
8T**+++
7C(()))3xUw<Ur   ry   r   r   r   rb   rt   r%   rk   rl   callbackmethod      2rw   r1   r2   r/   r0   r   r   )r9   rC   r	   r   r4   r   )selfr   rR   rk   rl   r   r   s         @r   generic_callback_testr      s    G$ $ $ $ $ 	"bAFQFQF#D::D
!$TBt{
K
K
KCCUq!f====GENCJ///GCL#c(+++GENCJ///GG$c'l33333r   c                  b   t          j        ddg          } ddgddgddgg}g d}t          t          t          | ||d           t          t          t          | ||d	           d
}t          j        t          |          5  t	          | ||ddi           d d d            d S # 1 swxY w Y   d S )Nry   r   r   r   r   r   ekki-ekki-ekkirk   rl   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrk   rl   options)r9   rC   assert_raises
ValueErrorr	   pytestwarnsr
   )rR   rk   rl   r-   s       r    test_unknown_solvers_and_optionsr     s+   
"bAFQFQF#D::D*g$T2BD D D D*g$T,@ @ @ @NG	oW	5	5	5 9 94$&67	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   B$$B(+B(c                      t          j        ddg          } ddgddgddgg}g d}t          | ||d          }t          |d	dd
g           d S )Nry   r   r   r   r   r   highsr   r   rw   r   )r9   rC   r	   r4   )rR   rk   rl   r   s       r   test_choose_solverr     sk    
"bAFQFQF#D::D
!T4
0
0
0CCUq!f======r   c                     t          j        t                    5  t          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr	   r~   r   r   test_deprecationr   (  s~   	(	)	) , ,*++++, , , , , , , , , , , , , , ,	(	)	) - -+,,,,- - - - - - - - - - - - - - -	(	)	) % %)$$$$% % % % % % % % % % % % % % % % % %s0   8<<A::A>A>B==CCc            	         t          dd          } d}| j        dk    sJ | j                            |          sJ t	          d          \  }}}}}dgt          |          z  }dgt          |          z  }dd	i}	t          ||||d|	|
          } d}| j        dk    sJ | j                            |          sJ ddi}	t          ||||d|	          } d}| j        dk    sJ | j                            |          sJ t          ddd          } d}| j        dk    sJ | j                            |          sJ t          dd          } d}| j        dk    sJ | j                            |          sJ ddlm}
  |
dd          \  }}d}|dk    sJ |                    |          sJ  |
d d           \  }}d}|dk    sJ |                    |          sJ d S )Nr   r   r   z6Optimization terminated successfully. (HiGHS Status 7:r   rw   r   r   
time_limit皙?)rR   rm   rn   rq   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rb   highs-dsrR   rm   rn   rq   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r6   )rq   r   z+The problem is infeasible. (HiGHS Status 8:r   r6   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-   
startswithrS   lenscipy.optimize._linprog_highsr   )r   r3   rP   rQ   rR   rJ   rI   rq   r   r   r   r   r-   s                r   test_highs_status_messager   1  sV   
!G
$
$
$C
BC:????;!!#&&&&&&q//Aq!WaXAF#A,KS!G
AAAfW!{< < <C
1C:????;!!#&&&&&"oG
AAAfZ!# # #C
6C:????;!!#&&&&&
!GG
4
4
4C
7C:????;!!#&&&&&
"W
%
%
%C
7C:????;!!#&&&&&LLLLLL44RBBOFG
GCQ;;;;c"""""44T4@@OFG
JCQ;;;;c"""""""r   c                  <    t          ddgddggdgddg           d S )Nr   r6   r         rk   rl   r   )r	   r~   r   r   test_bug_17380r   ^  s/    QF2q'$aVDDDDDDr   c                   6   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOePjQ        R                    eSjT        dNk    dOP          dQ             ZUdRS )SLinprogCommonTestsa  
    Base class for `linprog` tests. Generally, each test will be performed
    once for every derived class of LinprogCommonTests, each of which will
    typically change self.options and/or self.method. Effectively, these tests
    are run for many combination of method (simplex, revised simplex, and
    interior point) and options (such as pivoting rule or sparse treatment).
    c                 $    t          |            d S N)r   r   s    r   test_callbackz LinprogCommonTests.test_callbackz  s    d#####r   c                     t          dd          \  }}}t          |||| j        ddi          }t          |d           d S )Nrc   dispTrk   rl   r   r   fOr1   r`   r	   r   r4   r   rP   rQ   rR   r   s        r   	test_dispzLinprogCommonTests.test_disp}  sV    2r""1aaaa%tn. . .);<<<<<<r   c                     ddg}ddgddgg}ddg}d}d}t          |||||f| j        | j        	          }t          |d
           d S )Nr6   r%   ry   r   r   rw   r   ry   N)rk   rl   rq   r   r   r   )r	   r   r   r4   )r   rR   rP   rQ   	x0_bounds	x1_boundsr   s          r   test_docstring_examplez)LinprogCommonTests.test_docstring_example  sv    G!Wq!fF 		aaaI0F"l4;@ @ @------r   c           	      l    dg}dgg}d}t          t          t          |||| j        | j                   d S )Nr   hellorm   rn   r   r   )r   	TypeErrorr	   r   r   )r   rR   rm   rn   s       r   test_type_errorz"LinprogCommonTests.test_type_error  sT     Cuid![$,	@ 	@ 	@ 	@ 	@ 	@r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |||t
          t          || j        | j                  }t          |ddg           t          ||           d S )N      ?      @      r   r   r}   r   )r9   rC   r@   rf   r	   rm   rn   r   r   r4   r   )r   rR   rk   	b_ub_origrl   rq   r   s          r   test_aliasing_b_ubz%LinprogCommonTests.test_aliasing_b_ub  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @t<<<<	4(((((r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |t
          t          |||| j        | j                  }t          |ddg           t          ||           d S )Nr   r   r   r   r!   r   )r9   rC   r@   rf   r	   rk   rl   r   r   r4   r   )r   rR   rm   	b_eq_origrn   rq   r   s          r   test_aliasing_b_eqz%LinprogCommonTests.test_aliasing_b_eq  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @qc::::	4(((((r   c           
          dg}dgg}dg}dgg}dg}d}t          ||||||| j        | j                  }t          |ddg           d S )Nr   r   g       @)            $@r   r   r   )r	   r   r   r4   r   rR   rk   rl   rm   rn   rq   r   s           r   test_non_ndarray_argsz(LinprogCommonTests.test_non_ndarray_args  sy     EwuwuatT4![$,@ @ @qc::::::r   c                     t          j        ddg          }ddgddgddgg}g d}	 	 d fd	} fd j        D             }d	|d
<   t          j        t
                    5   |||||           d d d            d S # 1 swxY w Y   d S )Nry   r   r   r   r   r   c           
      @    t          | |||||j        |           d S Nr   r	   r   )rR   rk   rl   rm   rn   rq   r   r   s          r   fz2LinprogCommonTests.test_unknown_options.<locals>.f  s7    AtT4v;9 9 9 9 9 9r   c                 ,    i | ]}|j         |         S r~   r   .0keyr   s     r   
<dictcomp>z;LinprogCommonTests.test_unknown_options.<locals>.<dictcomp>  "    <<<S$,s#<<<r   *   spamr   )NNNNNN)r9   rC   r   r   r   r
   )r   rR   rk   rl   r  os   `     r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s   Hb"XAAA'zz,0.2	9 	9 	9 	9 	9 	9
 =<<<t|<<<&	\/** 	2 	2Aadq1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s    A==BBc           	      ,   t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t	          j        t                    5  t          ||||| j        |          }d d d            n# 1 swxY w Y   t           j	        
                    |j        dd	g           t           j	        
                    |j        d
           d S )Nr6   r   r!   r   r      r  r   rR   rk   rl   rq   r   r   ?ffffff@ffffff)r9   rC   rf   r   r   r   r
   r	   r   testingr   r0   r/   r   rk   rl   rR   rq   r   r   s          r   test_integrality_without_highsz1LinprogCommonTests.test_integrality_without_highs  sT    x"a1a&1a&122x$$Xq!fbf+Q'cCFFl\/** 	G 	GADtF!%+G G GC	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	
""353*555

""37D11111s   B==CCc                     d fd	}t          t          |g dddg           t          j                    5  t          j        ddt
                     t          t          |g dg d           d d d            n# 1 swxY w Y   t          t          |g dd	dg           t          t          |d
dgd
dggd
dg           t          t          |d
dgd
ggd
g           t          t          |d
dgd
dggd
dg           t          t          |d
dgd
ggd
g           t          t          |d
dgd
gd
           d j        v r j        d         rd S t          t          |d
dgt          j        d          d
           d S )Nc           
      J    t          | |||||j        j                   d S r   r	   r   r   rR   rk   rl   rm   rn   rq   r   s         r   r  z1LinprogCommonTests.test_invalid_inputs.<locals>.f  9    AtT4v;> > > > > >r   r   r   r!   r   r!   r%   rq   ignorezCreating an ndarray from ragged)r   r  )r!   r%      r   r   r   r   )rk   rl   )rm   rn   _sparse_presolve)r   r   r!   )rk   rn   NNNNN)	r   r   warningscatch_warningsfilterwarningsr   r   r9   r>   )r   r  s   ` r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  s%   	> 	> 	> 	> 	> 	>
 	j!YYY7GHHHH$&& 	X 	X#;=VX X X*a;V;V;VWWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	j!YYY7HIIII 	j!aVAq6(!QHHHHj!aVA3%qcBBBBj!aVAq6(!QHHHHj!aVA3%qcBBBBj!aV1#A>>>> $,../0 /F 	j!aV"(92E2EANNNNNNs   8A;;A?A?c           	          d fd	}t           j                            d          }d}d}t          j                            ||fd|          }|                    |          }|                    |          }||                    |          z   }||                    |          z
  }	t          j        |	|f          }
||z  } j        dv rYt          t          d j         d	
          5  t          ||||
 j         j                   d d d            d S # 1 swxY w Y   d S i  j        } j        dv rd|d<   t          ||||
 j        |          }|j        sJ d S )Nc           
      J    t          | |||||j        j                   d S r   r  r  s         r   r  z5LinprogCommonTests.test_sparse_constraints.<locals>.f  r  r   l   QxD;r      re   )densityrH   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r$  )r9   r:   r;   r   r   random_arrayr   column_stackr   r   r   r	   r   r   )r   r  rH   rZ   rG   rm   x_validrR   rp   ro   rq   rn   r   r   s   `             r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  s   	> 	> 	> 	> 	> 	> i##$455|((!Q#(FF%%a((""szz!}}$szz!}}$"b**g~;888z 2NDK 2N 2N 2N O O O B B!$T&#{DLB B B BB B B B B B B B B B B B B B B B B B '&G{000$(!ADtF!%g? ? ?C;s   , DD Dc                     g d}g dg dg dg}g d}d}t          |||| j        d|i          }t          ||           t          |j        |           d S )	Nr%   rt   r!   r   r   r   r   r!  r!   r6   r   r   r!         @rt   r   r6   r   rt   rb   r%   r   r   r6         iX  r!   r   r   )r	   r   r   r   r   )r   rR   rP   rQ   r   r   s         r   test_maxiterzLinprogCommonTests.test_maxiter   s    !!!   " OOaaa('24 4 4'W555SWg&&&&&r   c                    | j                             dd          }t          dgd| j        | j                   }t	          |dd           |rt          |j        d           t          g dg d| j        | j                   }t	          |d	g d
           |rt          |j        d           t          ddgddg| j        | j                   }t	          |dddg           |rt          |j        d           t          g dg dg dgddgg d| j        | j                   }t	          |dg d           |rt          |j        d           d S d S )NpresolveTr   )r   r   rq   r   r   r   r  ))r!  r!  )r6   r6   )r!   r!   r  )r!  r6   r!   )r   r!   r   )r   r   r   r   r   r   r   r   r   r{   ))r!  )r   rb   )      @rA  rm   rn   rq   r   r      )r   r{   rA  )r   getr	   r   r4   r   r   r   do_presolver   s      r   test_bounds_fixedz$LinprogCommonTests.test_bounds_fixed.  s   
 l&&z488qc&![$,@ @ @Q""" 	%!$$$iii(B(B(B![$,@ @ @R,,, 	%!$$$q!fff%5![$,@ @ @QA''' 	%!$$$iiiyyy)))&<Aq6;;;![$,@ @ @ 	R--- 	%!$$$$$	% 	%r   c                    | j                             dd          }t          dgd| j        | j                   }t	          |           |rt          |j        d           t          dgdg| j        | j                   }t	          |           |rt          |j        d           t          g dg d| j        | j                   }t	          |           |rt          |j        d           d S d S )	Nr<  Tr   r"  r=  r   r  ))r!  r   r   r  )r   rD  r	   r   r   r   r   rE  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleN  s   
 l&&z488qc'$+t|TTT3 	%!$$$qc7)DKVVV3 	%!$$$iii(@(@(@![$,@ @ @3 	%!$$$$$	% 	%r   c                      j                             dd          }| o
 j        dk    }g d}dt          j        t          j        fdg}dt          j         t          j         fdg}|r fd}t          j        t                    5  t          j        t                    5   |||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5  t          j        t                    5   |||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S t          || j         j         	          }t          |           |rt          |j        d
           t          || j         j         	          }t          |           |rt          |j        d
           d S d S )Nr<  Tr   r  r   r  c                 B    t          | |j        j                  }|S )Nr=  r  )rR   rq   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gv  s,    a%)[$,H H H
r   r  rR   rq   r   r   r   )r   rD  r   r9   rf   r   r   RuntimeWarningr   
IndexErrorr	   r   r   r   )r   rF  simplex_without_presolverR   bounds_1bounds_2rL  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2e  s    l&&z488'2?#Ot{i7O IIRVRV,f5bfWrvg.7# 	)    
 n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * Ah!%dlD D DCs### )SWa(((Ah!%dlD D DCs### )SWa((((() )sl   C!B;/C;B?	?CB?	CCC6ED*E*D.	.E1D.	2EE	Ec                 d    ddg}t          || j        | j                  }t          |           d S )Nr6   r   r   )r	   r   r   r"   )r   rR   r   s      r   test_empty_constraint_1z*LinprogCommonTests.test_empty_constraint_1  s7    HaT\BBB#r   c                    g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |           | j                            dd          rt          |j        d           d S d S )N)r6   r   r6   r   r   r6   r   r=  r<  T)	r9   rf   r	   r   r   r"   rD  r   r   r   rR   rq   r   s       r   test_empty_constraint_2z*LinprogCommonTests.test_empty_constraint_2  s    NNbf+|Wg>a![$,@ @ @#<J-- 	%!$$$$$	% 	%r   c                     g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |g dd           d S )N)r   r6   r   r6   r   rW  r=  )r   r   r6   r   r   r2   r1   )r9   rf   r	   r   r   r4   rX  s       r   test_empty_constraint_3z*LinprogCommonTests.test_empty_constraint_3  sj    NNbf+|Wg>a![$,@ @ @}}}"EEEEEEr   c           
          t          j        ddg          dz  }ddgddgddgg}g d}t          |||t          t          t
          | j        | j                  }t          |ddd	g
           d S )Nr!   r   r6   r   r   r   r   irw   r   	r9   rC   r	   rm   rn   rq   r   r   r4   r   rR   rk   rl   r   s        r   test_inequality_constraintsz.LinprogCommonTests.test_inequality_constraints  s     HaVr!AAA zzatT4![$,@ @ @A??????r   c           
          ddg}ddgddgddgg}g d}t          |||t          t          t          | j        | j                  }t          |d	d
dg           d S )Nrw   r!   r   r6   r   r   )r   r6   r6   r   r!  gUUUUUU?gUUUUUU?r   r	   rm   rn   rq   r   r   r4   r_  s        r   test_inequality_constraints2z/LinprogCommonTests.test_inequality_constraints2  s     FARQ {{atT4![$,@ @ @uenEEEEEEr   c           
      :   ddg}d}t          |t          t          t          t          || j        | j                  }t          |ddg           ddg}t          |t          t          t          t          || j        | j                  }t          |ddg           d S )Nr   r   r   r   r2   )r	   rk   rl   rm   rn   r   r   r4   rX  s       r   test_bounds_simplez%LinprogCommonTests.test_bounds_simple  s    FatT4![$,@ @ @1v....&!atT4![$,@ @ @1v......r   c           
         t          j        dg          }t          j        dgg          }t          j        dg          }d}t          |t          t          |||| j        | j                  }t          |ddg           d S )Nr   r   )r   Nr   r!   r   r9   rC   r	   rk   rl   r   r   r4   r   rR   rm   rn   rq   r   s         r   test_bounded_below_only_1z,LinprogCommonTests.test_bounded_below_only_1  s    HcUOOx#  xatT4![$,@ @ @qc::::::r   c           
      <   t          j        d          }t          j        d          }t          j        g d          }dt           j        f}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr!   r  re   r   r[  r9   r   eyerC   rf   r	   rk   rl   r   r   r4   sumri  s         r   test_bounded_below_only_2z,LinprogCommonTests.test_bounded_below_only_2  s    GAJJvayyx			""rvatT4![$,@ @ @tFFFFFFr   c           
         t          j        dg          }t          j        dgg          }t          j        dg          }d}t          |t          t          |||| j        | j                  }t          |ddg           d S )Nr   r   )Nr   r   r!   r   rh  ri  s         r   test_bounded_above_only_1z,LinprogCommonTests.test_bounded_above_only_1  s    HcUOOx#  xatT4![$,@ @ @qc::::::r   c           
      >   t          j        d          }t          j        d          }t          j        g d          }t           j         df}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr!   r  r%   r   r[  rl  ri  s         r   test_bounded_above_only_2z,LinprogCommonTests.test_bounded_above_only_2  s    GAJJvayyx			""6'1atT4![$,@ @ @tFFFFFFr   c           
      R   t          j        d          }t          j        d          }t          j        g d          }t           j         t           j        f}t          |t          t          |||| j        | j	                  }t          ||t          j        |                     d S )Nr!   r  r   r[  rl  ri  s         r   test_bounds_infinityz'LinprogCommonTests.test_bounds_infinity  s    GAJJvayyx			""6'26"atT4![$,@ @ @tFFFFFFr   c           
      `   t          j        ddg          dz  }t          j        ddgddggt           j                  }ddg}t           j         t           j        f}dt           j        f}||f}t	          |||t
          t          || j        | j                  }t          |d	d
dg           d S )Nr6   r%   ry   r   r   r7   rw   r   gm۶m&g$I$Ig%I$I@r   )
r9   rC   float64rf   r	   rm   rn   r   r   r4   )r   rR   rk   rl   r   r   rq   r   s           r   test_bounds_mixedz$LinprogCommonTests.test_bounds_mixed  s     Hb!W"x"aQ!(*
4 4 41vfWbf%	L	Y'atT4![$,@ @ @VV<LMMMMMMr   c           
          ddg}ddgddgddgg}g d}dd	g}t          |||t          t          || j        | j        
          }t          |           d S Nr}   r   r{   r   r   r   )   r   r!   r   r   r   r   )r	   rm   rn   r   r   r   r   rR   rk   rl   rq   r   s         r    test_bounds_equal_but_infeasiblez3LinprogCommonTests.test_bounds_equal_but_infeasible  sv    GB!Q!R)zz)$atT4![$,@ @ @3r   c           
          ddg}ddgddgddgg}g d}dd	g}t          |t          t          |||| j        | j        
          }t          |           d S rz  )r	   rk   rl   r   r   r   ri  s         r   !test_bounds_equal_but_infeasible2z4LinprogCommonTests.test_bounds_equal_but_infeasible2  sv    GB!Q!R)zz)$atT4![$,@ @ @3r   c           
           ddg}ddgddgg}ddg}ddg} fd	 j         D             }d
|d<   t          |||t          t          | j        |          }t          |           d S )Nr   r   g?g@r%   rt   r   r|  c                 ,    i | ]}|j         |         S r~   r  r  s     r   r  zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>   r	  r   Fr<  r   )r   r	   rm   rn   r   r   r   rR   rk   rl   rq   r  r   s   `      r   test_bounds_equal_no_presolvez0LinprogCommonTests.test_bounds_equal_no_presolve  s    
 FAc
#1v&!<<<<t|<<<*atT4![!5 5 53r   c           
      f   d\  }}t           j                            d          }|                    |          }d|d<   |                    ||f          }d|d d df<   |                    |          }g dg}d}g d}	t          ||||||	| j        | j                  }
t          |
d	
           d S )Nr  l   ujo0o r   r   )r   r   r   r   r!   )rz   rb   r  )rz   Nr   r   g["r   )r9   r:   r;   r	   r   r   r4   )r   rZ   rG   rH   rR   rm   rn   rk   rl   rq   r   s              r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1'  s    1i##O44JJqMM!zz1a&!!QQQT
zz!}}~BBBatT4![$,@ @ @);<<<<<<r   c           
      l   | j         dv rt          j                     t          j                            d          }d\  }}|                    |          }d|d<   |                    ||f          }d|d d df<   |                    |          }|                    ||f          }d|d d df<   |                    |          }d}	t          ||||||	| j         | j                  }
t          |
           | j        	                    d	d
          r d| j         vrt          |
j        d           d S d S d S )N>   r   	highs-ipml   T-	r r$   r6   r   r   r   r   r<  Tr   )r   r   xfailr9   r:   r;   r	   r   r"   rD  r   r   )r   rH   rZ   rG   rR   rm   rn   rk   rl   rq   r   s              r   test_zero_column_2z%LinprogCommonTests.test_zero_column_26  sK   ;333LNNNi##$7881JJqMM!zz1a&!!QQQT
zz!}}zz1a&!!QQQT
zz!}}atT4![$,@ @ @#<J-- 	%'2L2L !$$$$$		% 	%2L2Lr   c           
          g d}g dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |d           d S )Nr  r   r   r   r   r   r   r   r!   r   r   r!   r   r	   rk   rl   rq   r   r   r4   r   rR   rm   rn   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1Q  sq    II		999iii0yyatT4![$,@ @ @++++++r   c           
          g dg dg dg}g d}g d}t          |||t          t          t          | j        | j                  }t          |d           d S )Nr  r  r  r  r   r   r   rb  r   rk   rl   rR   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2Y  sq    		999iii0yyIIatT4![$,@ @ @++++++r   c           
         d\  }}t           j                            d          }|                    |          }|                    ||f          }d|dd d f<   |                    |          }t          |t          t
          ||t          | j        | j                  }t          |           | j        
                    dd          rt          |j        d           d S d S )Nr$   l   <l(Sr   r   r<  T)r9   r:   r;   r	   rk   rl   rq   r   r   r   rD  r   r   r   rZ   rG   rH   rR   rm   rn   r   s           r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3a  s    1i##$566JJqMMzz1a&!!QT
zz!}}atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
         d\  }}t           j                            d          }|                    |          }|                    ||f          }d|dd d f<   |                    |           }t          |||t          t
          t          | j        | j                  }t          |           | j        
                    dd          rt          |j        d           d S d S )Nr$   l   F- r   r   r<  T)r9   r:   r;   r	   rm   rn   rq   r   r   r   rD  r   r   )r   rZ   rG   rH   rR   rk   rl   r   s           r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4p  s    1i##$455JJqMMzz1a&!!QT


1~atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
         g d}g dg dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |           | j                            dd          rt          |j	        d	           d S d S )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r%   r   r<  Tr   )
r	   rk   rl   rq   r   r   r   rD  r   r   r  s        r   test_singleton_row_eq_1z*LinprogCommonTests.test_singleton_row_eq_1  s    LLlllLLL,,,G||atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          g d}g dg dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |d           d S )	Nr  r  r  r  )r   r   r   r%   r   r%   r   r  r  s        r   test_singleton_row_eq_2z*LinprogCommonTests.test_singleton_row_eq_2  sw    LLlllLLL,,,G||atT4![$,@ @ @++++++r   c           
         g d}g dg dg dg dg}g d}g d}t          |||t          t          || j        | j                  }t          |           | j                            d	d
          rt          |j        d           d S d S )Nr  r  r  r6   r   r   r   r  )r   r   r   r%   r   r   r   r   r   r<  Tr   	r	   rm   rn   r   r   r   rD  r   r   r}  s         r   test_singleton_row_ub_1z*LinprogCommonTests.test_singleton_row_ub_1  s    LLlllMMM<<<H}}@@@atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          g d}g dg dg dg dg}g d}g d}t          |||t          t          || j        | j                  }t          |d	
           d S )Nr  r  r  r  r  )r   r         r%   r  r   re   r   )r	   rm   rn   r   r   r4   r}  s         r   test_singleton_row_ub_2z*LinprogCommonTests.test_singleton_row_ub_2  s    LLlllMMM<<<H@@@atT4![$,@ @ @------r   c           
          ddg}ddgddgddgg}g d}t          |||t          t          t          | j        | j                  }t          |           d S )Nr6   r   r   )r   r   r@  r   )r	   rm   rn   rq   r   r   r   r_  s        r   test_infeasiblez"LinprogCommonTests.test_infeasible  sr    HAAR zzatT4![$,@ @ @3r   c           
          dg}dgg}d}d}t          |||t          t          || j        | j                  }t          |           | j                            dd          rt          |j        d           d S d S )	Nr   r   r%   )r!  rw   r   r<  Tr   r  r}  s         r   !test_infeasible_inequality_boundsz4LinprogCommonTests.test_infeasible_inequality_bounds  s    CuatT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          t          j        ddg          dz  }ddgddgg}ddg}t          |||t          t          t
          | j        | j                  }t          |           d S )Nr   r6   r   r   )	r9   rC   r	   rm   rn   rq   r   r   r"   r_  s        r   test_unboundedz!LinprogCommonTests.test_unbounded  sx    HaVr!QRBxatT4![$,@ @ @#r   c                      dg}dg} fd j         D             }d|d<   t          || j        |          } j        dk    rt          |j        d           d S t          |           d S )	Nr   Nr   c                 ,    i | ]}|j         |         S r~   r  r  s     r   r  zQLinprogCommonTests.test_unbounded_below_no_presolve_corrected.<locals>.<dictcomp>  r	  r   Fr<  rM  r   r!  )r   r	   r   r   r   r"   )r   rR   rq   r  r   s   `    r   *test_unbounded_below_no_presolve_correctedz=LinprogCommonTests.test_unbounded_below_no_presolve_corrected  s    C<<<<t|<<<*&![! ! ! ;+++Q'''''c"""""r   c           
         t          j        g d          }t          j        g dg dg dg          }t          j        g d          }g d}t          |||t          t          || j        | j                  }t          |           | j                                        	                    d          sDt          |j        d	         t           j                   t          |j        d
d         d           d
S d
S )|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        )r   r   r   r   r6   r6   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r6   r   r   r   )r   r   r   rW  rW  r   r   r   r6   N$   $The problem is (trivially) unboundedr9   rC   r	   rm   rn   r   r   r"   lowerr   r   r0   rf   r-   r}  s         r   *test_unbounded_no_nontrivial_constraints_1z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1  s%   
 H)))**x++++++,,,. / / x


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


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

 atT4![$,@ @ @}}}4dKKKKKKr   c           
         t          j        g d          }t          j        g dg dg dg          }g d}d}d | j                                        D             }||d<   t	          |||t
          t          t          | j        |	          }| j        d
k    r2| j        	                    d          st          ||d                    d S t          |g d           d S )N)rz   9   rx   g      8@)re   g      r   rx   )re   g      r  r   r  )r   r   r   r   c                     i | ]\  }}||	S r~   r~   )r  r  vals      r   r  z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>  s    ;;;(#sS#;;;r   r   r   r   bland)r   r   r   r   re  )r9   rC   r   itemsr	   rm   rn   rq   r   rD  r   r4   )r   rR   rk   rl   r   r  r   s          r   test_cyclic_blandz$LinprogCommonTests.test_cyclic_bland  s   H&&&''x------%' ( ( yy ;;dl&8&8&:&:;;;)atT4![!5 5 5 ;)##DL,<,<W,E,E#+C9>>>>> C<<<888888r   c                 &   d\  }}t           j                            d          }|                    |          }|                    ||f          }|                    |          }d|dd d f         z  |dd d f<   |dxx         dz  cc<   t          j                    5  t          j        ddt                     t          |t          t          ||t          | j        | j                  }d d d            n# 1 swxY w Y   t          |           d S )	N)rb   rb   l   $*P r   r   r6   r   A_eq does not appear...r   )r9   r:   r;   r%  r&  r'  r
   r	   rk   rl   rq   r   r   r   r  s           r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility(  sb    1i##O44JJqMMzz1a&!!zz!}}$r111u+oRURB$&& 	D 	D#3_F F F!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 	3s   AC77C;>C;c           
          t                      \  }}}}}}}t          |||||t          | j        | j                  }t          |||           d S )Nr   r   )r   r	   rq   r   r   r4   	r   rR   rk   rl   rm   rn   r   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem=  sf     5G4H4H14tT66atT4![$,@ @ @6BBBBBBr   c                    t          dd          \  }}}t          j                    5  t          j        ddt                     t          j        ddt
                     t          j        dt                     t          |||t          t          t          | j        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )Nrc   r   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )r`   r%  r&  r'  r
   rN  simplefilterr   r	   rm   rn   rq   r   r   r4   r  s        r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problemE  s)    !R((dA$&& 	D 	D#@/S S S#5~G G G!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	);<<<<<<s   BB55B9<B9c                    g d}d\  }}|||d|dddd|ddg|dd|d|ddddddgdd||ddddddddgdddddd||dd|dgdddd|||d|dddgddddddd||dd|gddddddddd|||gg}g d}t          j                    5  t          j        dt                     t	          |t
          t          ||t          | j        | j	                  }d d d            n# 1 swxY w Y   t          |ddd	
           d S )N)r   r%   rx      r%   r!   rt   r{   r   rC        rW  r   )r      i!   r   r   ir   r   i  ư>r  )r1   r,   r+   )r%  r&  r  r   r	   rk   rl   rq   r   r   r4   )r   rR   rG   prm   rn   r   s          r   test_network_flowz$LinprogCommonTests.test_network_flowU  s    54411aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a02 +**$&& 	D 	D!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	4dCCCCCCs   >ACCCc                 \   g d}ddgddgddgddgddgg}d\  }}||dddg|d||dgd||d|gddd||gg}g d}t          j                    5  t          rt          j        d	t                     t          j        d	d
t                     t          j        d	dt                     t          j        d	dt                     t          j        d	t                     t          |t          t          |||| j        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r!   r   r   r%   r   r!   r!  rW  )r}   r   r   r%   r   scipy.linalg.solve
Ill...r  Solving system with option...r   r{  r   )r%  r&  has_umfpackr  r   r'  rN  r
   r   r	   rk   rl   r   r   r4   )r   rR   rq   rG   r  rm   rn   r   s           r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityj  s    OOFFFFF 11aO1aO1aO1aO	
 }}$&& 	D 	D @%h???#6H H H#3_F F F#9?L L L!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	,,,,,,s   B8DDDc           
          g d}g dg dg}ddg}t          |||t          t          t          | j        | j                  }t          |d           d S )	N)r   ry   r}   )r!   r   r   )r   r!  r!   rb   rC  r   ir   rb  r_  s        r   (test_simplex_algorithm_wikipedia_examplez;LinprogCommonTests.test_simplex_algorithm_wikipedia_example  sp    LLIIII BxatT4![$,@ @ @------r   c           
          g d}g dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |dg dd	d
           d S )Nr2  r3  r4  r6  r7  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r1   r2   r,   r+   r  r  s        r   test_enzo_examplez$LinprogCommonTests.test_enzo_example  s     !!!   " atT4![$,@ @ @"@"@"@!	. 	. 	. 	. 	. 	.r   c                 L   g d}g dg dg dg dg dg}g d}t          j                    5  t          j        dd	t                     t	          |t
          t          ||t          | j        | j	        
          }d d d            n# 1 swxY w Y   t          |dg d           d S )N)r  g333333@g%@r  g333333g%)r6   r6   r6   r   r   r   )r   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	   rk   rl   rq   r   r   r4   r  s        r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  sE   ///%%%""""""""""""	$
 *))$&& 	D 	D#3_F F F!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 	"@"@"@	B 	B 	B 	B 	B 	Bs   ABB	B	c           
         d}t          j        |           }dt           j        z  t          j        d|dz             z  |dz   z  }t          j        t          j        |          dz
  t          j        |          f          }ddg}t          |t          t          ||t          | j        | j                  }t          |dt          j        |                     d S )Nrc   r   r   r   r   r   )r9   r   pir<   rD   cossinr	   rk   rl   rq   r   r   r4   r>   )r   rZ   rR   tmprm   rn   r   s          r   #test_enzo_example_c_with_degeneracyz6LinprogCommonTests.test_enzo_example_c_with_degeneracy  s    WQZZK"%i")Aq1u---Q7y"&++/26#;;7881vatT4![$,@ @ @bhqkkBBBBBBr   c           
         d}t          j        |           }dt           j        z  t          j        |          z  |dz   z  }t          j        |          dz
  }d|d<   t          j        |          }d|d<   t          j        ||f          }ddg}t          |t          t          ||t          | j        | j                  }t          |           d S )Nrd   r   r   r  r   r   )r9   r   r  r<   r  r  rD   r	   rk   rl   rq   r   r   r"   )	r   rZ   rR   r  row0row1rm   rn   r   s	            r   &test_enzo_example_c_with_unboundednessz9LinprogCommonTests.test_enzo_example_c_with_unboundedness  s    WQZZK"%i")A,,&!a%0 vc{{QQvc{{Qy$&&1vatT4![$,@ @ @#r   c           
          d}t          j        |           }dt           j        z  t          j        |          z  |dz   z  }t          j        t          j        |          dz
  t          j        |          f          }ddg} fd j        D             }d|d<   t          |t          t          ||t           j        |          }t          |           d S )Nrd   r   r   c                 ,    i | ]}|j         |         S r~   r  r  s     r   r  zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>  r	  r   Fr<  r   )r9   r   r  r<   rD   r  r  r   r	   rk   rl   rq   r   r   )r   rZ   rR   r  rm   rn   r  r   s   `       r   &test_enzo_example_c_with_infeasibilityz9LinprogCommonTests.test_enzo_example_c_with_infeasibility  s    WQZZK"%i")A,,&!a%0y"&++/26#;;7881v<<<<t|<<<*atT4![!5 5 53r   c           
         t          j        g d          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g dg d	g          }t          j        d
d
g          }t          |||||t          | j        | j                  }t          |d
t          j        |          d           d S )N)ggQ뱿Mbp?r  r  r  )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   g      4@)r   r   r6   r   r6   r   )r   r   r6   r   r6   r   r   r   g>)r1   r2   r,   )r9   rC   r	   rq   r   r   r4   
zeros_liker   rR   rk   rl   rm   rn   r   s          r   test_basic_artificial_varsz-LinprogCommonTests.test_basic_artificial_vars  s
   
 H>>>??x---/D/D/D...0D0D0D///1 2 2 x22233x///1H1H1HIJJxAatT4![$,@ @ @bmA6F6F!	# 	# 	# 	# 	# 	#r   c           
         t          d          \  }}}}}}t          ||||||| j        | j                  }t	          |j                   t	          |j                   t	          |j                    d| j        vrt	          |j        dk               t          ||j
        z  |j                   t          |||j
        z  z
  |j        d           t          |||j
        z  z
  |j        d           dD ]h}||                                v rPt          ||         d         t           j                  sJ t          ||         d	         t           j                  sJ id S )
Nr   rk   rl   rm   rn   rq   r   r   r   z%Optimization terminated successfully.gdy=r,   )eqlinineqlinr  upper	marginalsresidual)rr   r	   r   r   r   r   r   r   r-   r   r0   r/   r   r   keysr   r9   ndarray)	r   rR   rk   rl   rm   rn   rq   r   r  s	            r   test_optimize_resultz'LinprogCommonTests.test_optimize_result  sl   ,;A,>,>)4tT6adDt#DKO O OCJ$+%%CK#JJKKKCE	37+++tce|+SW5AAAAtce|+SYUCCCC9 	D 	DCchhjj  !#c(;"7DDDDD!#c(:"6
CCCCC	D 	Dr   c           /         g d}d}d}d}t          j        g dddd|dd	dd
ddd
dd
ddddddgddd|ddd	d
d
dd
d
dddddddgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddd
d
dddd
||ddd|dddddgdddddd
d
dddd
||d|ddddgdd
dd ddd|d
d
ddddd|dddgddddd
dd
ddd|d
|ddd|ddgdd
d
d ddd||d
ddddddd|dgddddd
d
dddd||d
ddddd|gg          }t          j        g d!          }t          j        g d"          }t          j                    5  t          j        d#d$t
                     t          j        d#d%t                     t          j        d#t                     t          |||t          t          || j        | j        &          }d d d            n# 1 swxY w Y   t          |d'(           d S ))N)r   r   r   r  r  r  r  r  r     r  r  r  r  r  r   r   r   r   r   r   gqq?     g)r   gQr   r   ry   r   r   r   r6   r6   r   r6   r6   r   r   r   r   r   r   r   r   g333333ry   r6   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   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   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   gףp=
?r   gffffff?g @)r  r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   g^Zr   )r9   rC   r%  r&  r'  r
   rN  r  r   r	   rm   rn   r   r   r4   )	r   rq   r  rL  hrk   rl   rR   r   s	            r   test_bug_5400z LinprogCommonTests.test_bug_5400  s   N N N xNNN4Ar1b!QAr1aAq!L1aAr2r1b"aAq!QJEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFb"aAr1aAq!Q1aK1aBAq!RAq!Q1aHCaAq"b!Q1aAq!L1aQAq!QAq!Q1aHBQ1aB1aAq!QJ1aRAq!Q2q!Q1aH7J K K: x 5 5 5 6 6 H 4 4 4 5 5$&& 	D 	D#@/S S S#5~G G G!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	)<======s   7A<F??GGc           
         t          j        g d          }t          j        g dg dg          }t          j        ddg          }t          j        g dg           }t          j        dg           }d}t          ||||||| j        | j        	          }t          |d
t          j        g d                     d S )Nr  )r   r  r  )     @r  r  g      @r  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r!  g@r!  r   r9   rC   r	   r   r   r4   )r   rR   rm   rn   rk   rl   rq   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139H  s     HYYYx'<'<'<=>>x9::2223444)%%%atT4![$,@ @ @ 	"$(<<<"8"8	: 	: 	: 	: 	: 	:r   c                    t          j        g dg          }t          j        dg          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g d	g d
g          j        }t          j        g d          }t          j                    5  t
          rt          j        dt                     t          j        ddt                     t          j        ddt                     t          j        ddt                     t          j        dt                     t          ||||||| j        | j                  }d d d            n# 1 swxY w Y   d}t          j        g d          }	t          |||	           d}
t!          |d d df         |
z
  |j                   t!          |j        |d d df         |
z              d S )N)
r   r   r   g(\?r   ?r   r   g(\?r   g%䃞?)
r   r   r   zG?r   r   r   gɿr   g)\(̿)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   gQ?r   r   r   r   r   r   )
r   gQ      пr   r   r   g{Gz r   r   gQ?)
r   r   r   r   r   r   r   r  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?r  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?r  re   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)
r   r  r  r  r  re   r  r  r!  r  r   r  r   r   )r9   rC   rg   r%  r&  r  r  r   r'  r
   rN  r   r	   r   r   r4   r   r0   )r   rm   rn   rk   rl   rq   rR   r   r1   r2   r,   s              r   test_bug_6690z LinprogCommonTests.test_bug_6690^  s   
 x@@@ABBx!!x444***---999...
   x999::MMMHHH
    	 H      $&& 	D 	D @%h???#A?T T T#@/S S S#5~G G G!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D %H G G G H H		JJJJ &A,-su555#%1!455555s   .B.E((E,/E,c                 d   t          d          \  }}}}}t          j                    5  t          j        ddt                     t          j        ddt
                     t          j        dt                     t          |t          t          ||t          | j        | j                  }d d d            n# 1 swxY w Y   d}t          ||           t          |                    |j                  |           t%          t'          j        |j        j                  dz
  |j                   d S )	Nr!   r   r  r  r   `4?r   r   )rS   r%  r&  r'  r
   rN  r  r   r	   rk   rl   rq   r   r   r4   r   dotr0   r   r9   r>   rV   )r   rm   rn   rR   _r   r1   s          r   test_bug_7044z LinprogCommonTests.test_bug_7044  so   
 +1oodAq!$&& 	D 	D#3_F F F#5~G G G!(M:::!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D )5555..."(35:..5su=====s   BB66B:=B:c                    t          j        g d          }t          j        g dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg          }t          j        g d          }t          j        g dg          }t          j        dgg          }dgdz  }t          ||||||| j        | j                  }t          |dd            d S )!N)	r6   r   r   r   r   r   r   r   r   )	r   g     g     x@g     8g     Xg      g     }@g      Tg     Pr)	r   g     @g      E@g     H@g      m@g     @g     x@g     hg     L@)	r   g      jg     g     ؀@g     t@g     @g     g     p@g     K@)	r   g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@)	r   g     s@     zg     n@r)  g     @h@g     {g      Zg     z)	r   g     @g     8@g     v@g     b@g     ؉g     `@g     ȃ@g     r@)	r  r          r*  r*  r*  r*  r*  r*  )	r  r*  r   r*  r*  r*  r*  r*  r*  )	r  r*  r*  r   r*  r*  r*  r*  r*  )	r  r*  r*  r*  r   r*  r*  r*  r*  )	r  r*  r*  r*  r*  r   r*  r*  r*  )	r  r*  r*  r*  r*  r*  r   r*  r*  )	r  r*  r*  r*  r*  r*  r*  r   r*  )	r  r*  r*  r*  r*  r*  r*  r*  r   )	r  r   r  r  r  r  r  r  r  )	r  r  r   r  r  r  r  r  r  )	r  r  r  r   r  r  r  r  r  )	r  r  r  r  r   r  r  r  r  )	r  r  r  r  r  r   r  r  r  )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r   r  )	r  r  r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   )	r  r   r   r   r   r   r   r   r   r   r   rx   r   ghb$[@r  r1   r,   r  r   s           r   test_bug_7237z LinprogCommonTests.test_bug_7237  s   
 H11122xEEE???BBBBBBEEEAAA888888888888888888888888000000000000000000000000-  0 x 8 8 8 9 9 x===>??x"!#atT4![$,@ @ @$??????r   c                    t          j        g dg dg dg dg          }t          j        |j        d                   }t          j        |j        d                    }dg|j        d         z  }t          j                    5  t          j        dd	t                     t          j	        dt                     t          |||t          t          || j        | j        
          }d d d            n# 1 swxY w Y   | j                            dd          dk     r| j        dk    rt#          |           d S t%          |dd           d S )N)X  i  iD4       3i)ii    @i  )r0  r   r   r/  r   )r.  r   r   r1  r   r   r   r   r   r  r   tolg&.>绽|=r   g r  r+  )r9   rC   r>   rF   r   r%  r&  r'  rN  r  r   r	   rm   rn   r   r   rD  r&   r4   )r   rk   rl   rR   rq   r   s         r   test_bug_8174z LinprogCommonTests.test_bug_8174  s    x000000%%%%%%	' ( (
 x
1&&WTZ]###DJqM)$&& 	D 	D#5~G G G!(M:::!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D <E4((500T[I5M5M5c:::::C-@tLLLLLLs   A!C11C58C5c                 ^   t          j        g d          }t          j        d           }t          j        dgdgdgdgdgdgdgg          }t          j        g dg dg dg dg dg          }t          j        d	gd
gd
gd
gd
gg          }t          j                    5  t
          rt          j        dt                     t          j        ddt                     t          |||||t          | j        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r   r   r   r   r{   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r6   )r  r   r   r   r   r   gUUUUUU)r   r  r   r   r   r   )r   r   r  r   r   r   r6  r   r   r   r  r   g?E@r   )r9   rC   identityr%  r&  r  r  r   r'  r
   r	   rq   r   r   r4   r  s          r   test_bug_8174_2z"LinprogCommonTests.test_bug_8174_2  s    H***++Ax"tbTB4"tbTBCCx!!!(((&&&((('''
   x#aS1#s344$&& 	D 	D @%h???#3_F F F!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	)9::::::s   "A#DDDc                    t          j        g d          }t          j        g dg dg dg dg dg          }t          j        g d          }t          |||| j        | j                  }t          |g d	
           d S )N)r{   r   r}         ?r:  )r%         @r:  r         )r   r   r   r5  re   )r!   r  r%   g      )rv   )r6   g      @r   r<  r   )r;  r   g      r6   g      #@)r   r   r   r   r   )rk   rl   r   r   )r   r   r  gUUUUUU@gUUUUUU#@re  )r9   rC   r	   r   r   r4   r_  s        r   test_bug_8561z LinprogCommonTests.test_bug_8561  s    
 H)))**x$$$######"""###% & & x((adt|![* * *'='='=>>>>>>r   c                    g d}g dg dg dg dg}g d}g d}d}t          j                    5  t          rt          j        d	t                     t          j        d	d
t                     t          j        d	t                     t          |||t          t          || j        | j                  }d d d            n# 1 swxY w Y   |                    g d           |                    d           d|d<   t          j                    5  t          rt          j        d	t                     t          j        d	d
t                     t          j        d	t                     t          |||t          t          || j        | j                  }d d d            n# 1 swxY w Y   d}t          |||           t          |||           d S )N)rz   rb   rw   r!   )rt   r|   r}   rw   )r|   rt   r%   ru   )r}   r%   rt   r}   )r!   ry   ry   rz   )rx   r?  r}   )r   r   r   r   g      B@r   r  r   )r   r   r6   r   r   r   r   r   )r1   r+   )r%  r&  r  r  r   r'  rN  r   r	   rm   rn   r   r   rA   r4   )	r   rR   rk   rl   rq   r1   res1res2r+   s	            r   test_bug_8662z LinprogCommonTests.test_bug_8662  s    OO   " ===#$&& 	E 	E @%h???#5~G G G!(M:::1dD$f"&+t|E E ED	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	MMM"""A q	$&& 	E 	E @%h???#5~G G G!(M:::1dD$f"&+t|E E ED	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E +DAAAA+DAAAAAAs%   BB>>CCBFF"Fc           
          ddg}ddgg}dg}ddg}t          |t          t          |||| j        | j                  }t          |dd	gd
           d S )Nr   r!  r   rv   ru   r   r   r   g۶m۶m?gI$I$@r[  )r	   rk   rl   r   r   r4   ri  s         r   test_bug_8663z LinprogCommonTests.test_bug_86631  st     FByt\*atT4![$,@ @ @4yfEEEEEEr   c                 b   dg}dgdgg}ddg}dgdgdgg}g d}t          j                    5  t          j        dt                     t          j        dd	t
                     t          |||||t          | j        | j	        
          }d d d            n# 1 swxY w Y   t          |           d S )Nr%   r   r!  r   r|   rx   r!   r   rb   r   r  r   )r%  r&  r  rN  r'  r
   r	   rq   r   r   r   r  s          r   test_bug_8664z LinprogCommonTests.test_bug_8664<  s&    CaSz1vbTA3zz$&& 	D 	D!(N;;;#9?L L L!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	3s   ABBBc           
      L   t          j        g d          }t          j        g dg dg          }t          j        ddg          }g d}t          |||t          t          || j        | j                  }t          |d           t          ||j	        z  |j
                   d	S )
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r6   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rW  rW  r   r   N)r9   rC   r	   rm   rn   r   r   r4   r   r0   r/   r}  s         r   test_bug_8973z LinprogCommonTests.test_bug_8973M  s     H%%%&&x///:;;xB  MMMatT4![$,@ @ @ 	,,,,QY(((((r   c           
         t          j        d          }t          j        dgg          }t          j        dg          }d}t          |||t          t
          || j        | j                  }t          |dgd           dS )z
        Additional test for:
        https://github.com/scipy/scipy/issues/8973
        suggested in
        https://github.com/scipy/scipy/pull/8985
        review by @antonior92
        r   r   r   r   r   r[  N)	r9   r>   rC   r	   rm   rn   r   r   r4   r}  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2^  s     HQKKx!x~~atT4![$,@ @ @t;;;;;;r   c           
      `   t          j        d          }t          j        dgg          }t          j        dg          }d}ddg}ddgddgg}ddg}dd	g}d
di}|                    | j                   t          |||t          t          || j        |          }t          |ddgd           dS )zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   r   r6   r%   ry   r   rw   r   r   Tr   rb   r   r[  N)
r9   r>   rC   updater   r	   rm   rn   r   r4   r  s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124n  s    
 HQKKx!x~~GQ!Q 1v
+TN	atT4![!5 5 5BxSAAAAAAr   c                    t          j        g dg dg dg dg dg dg          }t          j        g d          }t          j        dd	t          j        d
          fd          }t	          j                    5  t	          j        ddt                     t          |t          t          ||t          | j        | j                  }ddd           n# 1 swxY w Y   t          |g dd           dS )zq
        Test for redundancy removal tolerance issue
        https://github.com/scipy/scipy/issues/10349
        )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )      rb         f   r   r   r%   Naxisr   r  r   )   \   r  rS  r   rb   rX  r[  )r9   rC   concatenater>   r%  r&  r'  r
   r	   rk   rl   rq   r   r   r4   )r   rm   rn   rR   r   s        r   test_bug_10349z!LinprogCommonTests.test_bug_10349  sp   
 x++++++++++++++++++- . . x55566NAq"(1++.T:::$&& 	D 	D#3_F F F!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 	'@'@'@bQQQQQQs   ;ACCCdarwinz0Failing on some local macOS builds, see gh-13846reasonc                 \   g d}g dg dg dg dg dg dg dg d	g d
g dg
}g d}i }| j                             d          sddi}|                    | j                   t	          j                    5  t	          j        ddt                     t          rt	          j	        dt                     t	          j        ddt                     t	          j        ddt                     t	          j        ddt                     t	          j        ddt                     t	          j        ddt                     t	          j        ddt                     t          |t          t          ||t           | j         |          }ddd           n# 1 swxY w Y   t#          |j        d           dS )zA
        Test that autoscale fixes poorly-scaled problem
        )       r*  r_  r*  r_  r*  r*  r*  r*  r*  r*  r*  r*  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  r   r  r   r  r  r  r  r  r  r   r  )r  r  r   r  r   r  r  r  r  r  r  r  r   )
g     Ag      Ag     @Ag      A   Ar`  r`  r`  r`  r`  r   	autoscaleTr   r  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...An ill-conditioned...r   Nl )r   r   rM  r   r%  r&  r'  r
   r  r  r   rN  r   r	   rk   rl   rq   r   r/   )r   rR   rm   rn   r  r   s         r   test_bug_10466z!LinprogCommonTests.test_bug_10466  sc    NMMDDDDDDDDDEEEDDDDDDDDDDDDDDDDDD	F     
 {%%g.. 	$d#A	$&& 	9 	9#9?L L L @%h???#6H H H#9>K K K#3^E E E#8.J J J#5}F F F#1=B B B !T4tV!%a9 9 9C%	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9( 	-----s   6D
FFFN)V__name__
__module____qualname____doc__r   r   r   r   r   r   r   r  r  r(  r0  r:  rG  rI  rS  rU  rY  r\  r`  rc  rf  rj  ro  rq  rs  ru  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'  r,  r4  r8  r=  rB  rD  rG  rI  rK  rN  rZ  r   markskipifsysplatformrd  r~   r   r   r   r   m  s"        $ $ $= = =	. 	. 	.@ @ @) ) )) ) ); ; ;2 2 2 2 2 2$O O O:  B' ' '% % %@% % %.') ') ')R  
% % %F F F
@ 
@ 
@F F F
/ 
/ 
/; ; ;G G G; ; ;G G GG G GN N N               "= = =% % %6, , ,, , ,% % %% % %
% 
% 
%, , ,% % %. . .	  	  	 % % %  # # # A A A(A A A(
L 
L 
L9 9 92     *C C C= = = D D D* -  -  -D	. 	. 	.. . .(B B B$	C 	C 	C  "     # # #"D D D.6> 6> 6>p: : :,,6 ,6 ,6\> > >('@ '@ '@RM M M0; ; ;2? ? ?"$B $B $BL	F 	F 	F     ") ) )"< < < B B B&R R R( [0!/  1 1/. /.1 1/. /. /.r   r   zignore::DeprecationWarningc                       e Zd ZdZdS )LinprogSimplexTestsr   Nre  rf  rg  r   r~   r   r   rn  rn    s        FFFr   rn  c                       e Zd ZdZd ZdS )LinprogIPTestsr   c                 .    t          j        d           d S )Nz*Test is failing, but solver is deprecated.r   skipr   s    r   rd  zLinprogIPTests.test_bug_10466  s    @AAAAAr   N)re  rf  rg  r   rd  r~   r   r   rq  rq    s-        FB B B B Br   rq  c                   $    e Zd ZdZd Zd Zd ZdS )LinprogRSTestsr   c                 .    t          j        d           d S Nz Intermittent failure acceptable.rs  r   s    r   r  zLinprogRSTests.test_bug_5400      677777r   c                 .    t          j        d           d S rx  rs  r   s    r   rB  zLinprogRSTests.test_bug_8662  ry  r   c                 .    t          j        d           d S rx  rs  r   s    r   r  z LinprogRSTests.test_network_flow  ry  r   N)re  rf  rg  r   r  rB  r  r~   r   r   rv  rv    sF        F$8 8 88 8 88 8 8 8 8r   rv  c                   ,   e Zd Zd Zej                            dddiddiddiddiddid	did
diddig          d             Zd Zej        	                    d          d             Z
d Zd Zej                            d          d             ZdS )LinprogHiGHSTestsc           	          d }t          j        ddg          }ddgddgddgg}g d}t          t          t          ||||| j                   t	          |||| j        	          }t          |d
ddg           d S )Nc                     d S r   r~   r   s    r   r   z+LinprogHiGHSTests.test_callback.<locals>.cb  s    4r   ry   r   r   r   r   r   r   r   r   rw   r   )r9   rC   r   NotImplementedErrorr	   r   r4   )r   r   rR   rk   rl   r   s         r   r   zLinprogHiGHSTests.test_callback  s    	 	 	Hb"XAAA'zz)7ADt!$+	7 	7 	7 	7addkBBB1a&AAAAAAr   r   r   r6   r   r<  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                       fd}|                      j                   t          j        t                    5   ||           d d d            d S # 1 swxY w Y   d S )Nc                 6    t          dj        |            d S )Nr   r   r  )r   r   s    r   r  z7LinprogHiGHSTests.test_invalid_option_values.<locals>.f  s     Adk7;;;;;;r   r  )rM  r   r   r   r
   )r   r   r  s   `  r   test_invalid_option_valuesz,LinprogHiGHSTests.test_invalid_option_values  s    	< 	< 	< 	< 	<t|$$$\/** 	 	Ag	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          dt          j                            d                    \  }}}}}d}t	          ||||| j        | j                  }t          |j        dk    | j        dk               d S )Nr%   i(! rH   r   rB  r   r  )	rS   r9   r:   r;   r	   r   r   r   crossover_nit)r   rm   rn   rR   r&  rq   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover  s    *1")2G2G2P2PQQQdAq!ad#DKO O O 	S&!+T[K-GHHHHHr   rb   c           
         
 t          d          \  
t          
 j         j                  }j        \  
 fd}t          |d|j                  }t          |j        j	        |           
 fd}t          |d|j                  }t          |j
        j	        |           
 fd}t          j        d	
          5  t          |d|j                  }d|t          j                   <   d d d            n# 1 swxY w Y   t          |j        j	        |           
 fd}t          j        d	
          5  t          |d|j                  }	d|	t          j                   <   d d d            n# 1 swxY w Y   t          |j        j	        |	           d S )Nr   rh   r  c           	      D    t          | j                  j        S Nr   r	   r   r/   )r0   rm   rk   rn   rq   rR   r   s    r   f_bubz/LinprogHiGHSTests.test_marginals.<locals>.f_bub*  s.    1dAtT6"&+/ / //23r   z3-point)r   f0c           	      D    t          | j                  j        S r  r  )r0   rm   rk   rl   rq   rR   r   s    r   f_beqz/LinprogHiGHSTests.test_marginals.<locals>.f_beq2  s.    1dD$6"&+/ / //23r   c           	      z    t          j        | g          j        }t          |j                  j        S r  r9   rC   rg   r	   r   r/   )	r0   rq   rm   rk   rn   rl   rR   r   rp   s	     r   f_lbz.LinprogHiGHSTests.test_marginals.<locals>.f_lb:  sD    Xq"g&&(F1dD$f"&+/ / //23r   r   )invalidc           	      z    t          j        | g          j        }t          |j                  j        S r  r  )	r0   rq   rm   rk   rn   rl   rR   ro   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ubG  sD    Xr1g&&(F1dD$f"&+/ / //23r   )rr   r	   r   r   rg   r   r/   r   r  r  r  r9   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrm   rk   rn   rl   rq   rR   ro   rp   s   `         @@@@@@@@r   test_marginalsz LinprogHiGHSTests.test_marginals   s    -<,C,C,C)4tT6adDt#DKO O OB	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 #5$ySWMMM-v666	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 #5$ySWMMM	+V444	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 [*** 	( 	(%dBySWMMME&'E2;r??"#	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 		+U333	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 [*** 	( 	(%dBySWMMME&'E2;r??"#	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 		+U33333s$   $1D!!D%(D%&1F##F'*F'c           
      (   t          d          \  }}}}}}t          ||||||| j        | j                  }| |j        |j        j        z  z   |j        |j        j        z  z   |j        j        z   |j	        j        z   }t          |dd           d S )Nr
  r  r  r   -q=r  )rr   r	   r   r   rg   r  r  r  r  r  r   )	r   rR   rk   rl   rm   rn   rq   r   resids	            r   test_dual_feasibilityz'LinprogHiGHSTests.test_dual_feasibilityR  s    ,;,D,D,D)4tT6adDt#DKO O O
 dfs{444#)--.$% $% 	qu------r   c           
          t          d          \  }}}}}}t          ||||||| j        | j                  }t	          j        |j        j        |||j        z  z
  z  d          sJ d S )Nr
  r  r  r   )	rr   r	   r   r   r9   allcloser  r  r0   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slackness`  s    ,;,D,D,D)4tT6adDt#DKO O O {3;0D4#%<4GH!LLLLLLLr   z&Upstream / Wrapper issue, see gh-20589r\  c                    g d}g d}g d}g d}g d}g d}t          j        |t           j                  }t          j        |t           j                  }t          j        |t           j                  }	t          j                            |||	ffd	          }
t          j        |t           j                  }t          j        |t           j                  }t          j                            |d
d
|
||          }|j	        dk    sJ |j
        }t           j                            |
|z  |z
            }t           j                            |j        j                  }t          ||           d
S )zH
        Test that `linprog` now solves a poorly-scaled problem
        )!)     @g    j/aA)r  Nr  N)r  gS8(U@r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   MbP?MbP<:=r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   )Sr   r   r   r   r   r   r!   r!   r%   r%   r!  r!  rw   rw   r{   r{   rt   rt   rx   rx   rb   r  r  r  r  r  r     r  r{  r{  r{  r{  rC  rC  r  r  r  r     r  r  r  r  r  r  r  rc   rc   rc   rc      r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )SrC  r{  r  r  r  r  r  rc   r  r  r  r  r  r  r  r  r  r  r  r   r       r!   r{  r  r%   r   r%   r   r  r  r   r  r   r  r  rC  r!  r%   r!  r%   r  r  rw   r!  rw   r!  rc   r  r{   rw   r{   rw   r  r  rt   r{   rt   r{   r  r  rx   rt   rx   rt   r  r  rb   rx   rb   rx   r  r  r  rb   r  rb   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  r7   )r  r  )rF   N)rk   rl   rm   rn   rq   r   )r9   asarrayrw  int32r   r   	csr_arrayoptimizer	   r   r0   linalgnormr  r  r   )r   
boundaries
eq_entries
eq_indizeseq_vars	eq_valuescoefficientsnp_eq_entriesnp_eq_indizes
np_eq_varsa_eqrn   rR   resultr0   n_r_xn_rs                    r   test_bug_20336z LinprogHiGHSTests.test_bug_20336k  s   
	# 	# 	#
9 9 9
N N N

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

#a'I|&&w//H[(3  5 5       5 5 + + + + +6 6 6$ $ $ $ $; ; ;; ; ; ; ; ; ;r   r  c                   |     e Zd ZddiZej                            ej        dk    d           fd            Z	 xZ
S )TestLinprogIPDenser   Fr[  z:Fails on some macOS builds for reason not relevant to testr\  c                 H    t                                                       d S r   r  r  r  s    r   r  z TestLinprogIPDense.test_bug_6139  s!    
 	r   )re  rf  rg  r   r   ri  rj  rk  rl  r  r  r  s   @r   r   r     su        G [ K          	          r   r   c                       e Zd ZdddZdS )TestLinprogIPSparseCholmodTr   r   Nre  rf  rg  r   r~   r   r   r  r    s        !t44r   r  c                       e Zd ZdddZd ZdS )TestLinprogIPSparseUmfpackTFr  c                 .    t          j        d           d S )Nz2Failing due to numerical issues on some platforms.rs  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KLMMMMMr   N)re  rf  rg  r   r  r~   r   r   r  r    s5        !u55	N 	N 	N 	N 	Nr   r  c                       e Zd ZddddZej                            ej        dk    d          ej        	                    d           fd                        Z
ej                            d	           fd
            Zd Zd Z xZS )TestLinprogIPSparseTFr   r   sym_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                 H    t                                                       d S r   r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6139#  !     	r   Fails with ATLAS, see gh-7877c                 H    t                                                       d S r   r  r"  r  s    r   r"  z!TestLinprogIPSparse.test_bug_6690-  !     	r   c                     t          d          \  }}}}}d}t          j                    5  t          rt          j        dt
                     t          j        ddt                     t          j        ddt                      fd j	        D             }d|d<   t          |t          t          ||| j        |	          }d d d            n# 1 swxY w Y   d
}t          ||           d S )Nr!   r   r   zMatrix is exactly singularr  c                 ,    i | ]}|j         |         S r~   r  r  s     r   r  zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>?  "    @@@Cdl3'@@@r   Fr<  r   r$  r   )rS   r%  r&  r  r  r   r'  r   r
   r   r	   rk   rl   r   r4   )	r   rm   rn   rR   r&  rq   r  r   r1   s	   `        r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve2  sM   *1oodAq!$&& 	9 	9 @%h???#68IK K K#9?L L L A@@@4<@@@A!AjM!T4tV!%a9 9 9C	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 )555555s   BCCCc                     t          d          \  }}}}}t          j                    5  t          j        ddt                     t          j        ddt                      fd j        D             }d}|D ]E}||d<   t          |t          t          ||t           j
        |          }d	}	t          ||	
           F	 d d d            d S # 1 swxY w Y   d S )Nr!   r   r  zInvalid permc_spec optionc                 ,    i | ]}|j         |         S r~   r  r  s     r   r  zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>O  r  r   )NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r$  r   )rS   r%  r&  r'  r
   r   r	   rk   rl   rq   r   r4   )
r   rm   rn   rR   r&  r  permc_specsr   r   r1   s
   `         r   test_sparse_solve_optionsz-TestLinprogIPSparse.test_sparse_solve_optionsG  sO   *1oodAq!$&& 	> 	>#3_F F F#5H H H@@@@4<@@@A7K * > >
",,atT4%)[!= = =0=====>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   BCCC)re  rf  rg  r   r   ri  rj  rk  rl  xfail_on_32bitr  r  r"  r  r"  r  r  s   @r   r  r     s        5UCCG[ @    [ !: ; ;       ; ;	   [=>>        ?> 6 6 6*> > > > > > >r   r  c                       e Zd ZdddZej                            ej        dk    d          ej        	                    d           fd                        Z
d Zej                            d	           fd
            Z xZS )TestLinprogIPSparsePresolveT)r   r#  r[  r  r\  r  c                 H    t                                                       d S r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6139_  r  r   c                 .    t          j        d           d S )Nz6_sparse_presolve=True incompatible with presolve=Falsers  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityi  s    LMMMMMr   r  c                 H    t                                                       d S r   r  r  s    r   r"  z)TestLinprogIPSparsePresolve.test_bug_6690l  r  r   )re  rf  rg  r   r   ri  rj  rk  rl  r#  r  r  r  r"  r  r  s   @r   r%  r%  \  s        488G[ @    [ !: ; ;       ; ;	  N N N [=>>        ?>         r   r%  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestLinprogIPSpecificr   c                    t           rddd}nt          rddd}ndddd}t          dd          \  }}}t          |||| j        |          }t          |||| j                  }t          |j        |j        dd	d
           d S )NTr  Fr  rc   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r)   )has_cholmodr  r`   r	   r   r   r/   )r   r   rP   rQ   rR   r@  rA  s          r   test_solver_selectz(TestLinprogIPSpecific.test_solver_selectx  s     	L!%488GG 	L!%599GG!%5UKKG2r""1aqqqgNNNqqq===$( J"	0 	0 	0 	0 	0 	0r   c                 j    dg}dg}t          ||| j        ddd          }t          |d           d S )Nr6   r  FT)r<  r   rM  r   )r	   r   r4   rX  s       r   )test_unbounded_below_no_presolve_originalz?TestLinprogIPSpecific.test_unbounded_below_no_presolve_original  sV    D&![+0dCCE E E 	,,,,,,r   c                     t          dd          \  }}}t          |||| j        ddi          }t          |d           d S )Nrc   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_cholesky  sW    2r""1aaaa)402 2 2);<<<<<<r   c           
         t          dd          \  }}}t          j                    5  t          j        ddt                     t          j        ddt
                     t          j        ddt                     t          j        ddt                     t          |||| j        ddd	          }d d d            n# 1 swxY w Y   t          |d
           d S )Nrc   r   r  r  rb  rc  T)ipr   r   r   r   )
r`   r%  r&  r'  rN  r
   r   r	   r   r4   r   s        r   test_alternate_initial_pointz2TestLinprogIPSpecific.test_alternate_initial_point  sB   2r""1a$&& 	> 	>#6H H H#9?L L L#5}F F F#1=B B B !!!DK)-t"<"<> > >C	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	);<<<<<<s   B	B==CCc                 j   dg}dgdgg}ddg}dgdgdgg}g d}t          j                    5  t          j        dt                     t          j        dd	t
                     t          |||||t          | j        d
di          }d d d            n# 1 swxY w Y   t          |j
         d           d S )Nr%   r   r!  r   r|   rx   rF  r   r  r<  Fr   r   )r%  r&  r  rN  r'  r
   r	   rq   r   r   r   r  s          r   rG  z#TestLinprogIPSpecific.test_bug_8664  s.   CaSz1vbTA3zz$&& 	K 	K!(N;;;#9?L L L!T4tV!%z56IK K KC		K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	CK!?@@@@@s   ABBBN)	re  rf  rg  r   r-  r/  r1  r4  rG  r~   r   r   r*  r*  r  si        F0 0 0- - -= = == = =$A A A A Ar   r*  c                   <    e Zd Zi Zd Zd Zd Zd Zd Zd Z	d Z
dS )	TestLinprogRSCommonc                 .    t          j        d           d S rx  rs  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland  ry  r   c                     t                      \  }}}}}}}t          |||||t          | j        | j        |	  	        }t          |||           t          |j        d           d S Nr   r   x0r   r   r   r	   rq   r   r   r4   r   r   r  s	            r   "test_nontrivial_problem_with_guessz6TestLinprogRSCommon.test_nontrivial_problem_with_guess  w    4F4H4H14tT66atT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          ||||||| j        | j        |	  	        }	t	          |	||           t          |	j        d           d S )N)r   r   r   r   r;  r   r   r   r	   r   r   r4   r   r   
r   rR   rk   rl   rm   rn   r   r   rq   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variables  s    4F4H4H14tT66FFFatT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          ||||||| j        | j        |	  	        }	t	          |	||           t          |	j        d           d S )N)r  r   Nr   r  g333333?r;  r   r   rA  rB  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variables  s    4F4H4H14tT66<<<atT4![$,6K K K6BBBBSWa     r   c                    t                      \  }}}}}}}dg}t          j        g d          }d}g d}t          ||||||| j        | j        |	  	        }	t          |	||           t          |	j        d           d S )Nr%   )gibl3g%G/?r   r  g@Q$@)r   rE  r   rF  r;  r   r   )	r   r9   rC   r	   r   r   r4   r   r   rB  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variable  s    4F4H4H14tT66s66677???atT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          |||||t          | j        | j        |	  	        }	t          |	j        d           d S N)r   r   r!   re   r;  rw   r   r	   rq   r   r   r   r   
r   rR   rk   rl   rm   rn   r   r   	bad_guessr   s
             r   &test_nontrivial_problem_with_bad_guessz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guess  k    4F4H4H14tT66!MM	atT4![$,9N N NSZ#####r   c                    t           j                            d          }t          d|          \  }}}}}|                    |j                  }t          j                    5  t          j        ddt                     t          j        ddt                     t          j
        dt                     t          |||| j                  }t          |||| j        |j                  }t          ||z   ||| j        |j                  }	d d d            n# 1 swxY w Y   t          ||j        	           t#          |j        d
           t          |	           t'          |	j        |j        k                d S )Nl   %4| r!   r  r   r  r  )rm   rn   r   )rm   rn   r   r<  r   r   )r9   r:   r;   rS   rF   r%  r&  r'  r
   rN  r  r   r	   r   r0   r4   r/   r   r   r   )
r   rH   rP   rQ   rR   r&  r  r   rA  res3s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  s   i##O44$QC0001aAJJqw$&& 	P 	P#3_F F F#5~G G G!(M:::!!!DK@@@C111T[SUKKKD1q5qqOOOD	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	#'2222TXq!!!37"#####s   $B(DDDN)re  rf  rg  r   r  r>  rC  rG  rI  rO  rS  r~   r   r   r7  r7    s        G8 8 8! ! !! ! !! ! !	! 	! 	!$ $ $$ $ $ $ $r   r7  c                       e Zd ZddiZdS )TestLinprogRSBlandpivotr  Nr  r~   r   r   rU  rU   	  s         GGGr   rU  c                       e Zd ZdZi Zd ZdS )TestLinprogHiGHSSimplexDualr   c                    t                      \  }}}}t          ||||| j        | j                  }t	          |j        d           t          |j        du           t          t          j	        |j
        dk                         t          t          j	        |j        d |D             k                         t          t          j	        |j        d |D             k                         dS )z
        The scaled model should be optimal, i.e. not produce unscaled model
        infeasible.  See https://github.com/ERGO-Code/HiGHS/issues/494.
        )rk   rl   rq   r   r   r   Ngưc                 4    g | ]\  }}|t           j        n|S r   r9   rf   r  ro   rp   s      r   
<listcomp>zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>	  s6     !5 !5 !5%+R ,.:2 !5 !5 !5r   c                 <    g | ]\  }}|t           j         n|dz
  S )Nr  r[  r\  s      r   r]  zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>	  s<     !5 !5 !5%+R -/J"&BI !5 !5 !5r   )r   r	   r   r   r   r   r   r0   r9   allr   )r   rR   rk   rl   r   r   s         r   test_lad_regressionz/TestLinprogHiGHSSimplexDual.test_lad_regression	  s    1224tadd![$,@ @ @SZ###T!"""sy5())***su !5 !5/3!5 !5 !5 5 6 6 	7 	7 	7su !5 !5/3!5 !5 !5 5 6 6 	7 	7 	7 	7 	7r   N)re  rf  rg  r   r   r`  r~   r   r   rX  rX  		  s-        FG7 7 7 7 7r   rX  c                       e Zd ZdZi ZdS )TestLinprogHiGHSIPMr  N)re  rf  rg  r   r   r~   r   r   rb  rb  %	  s        FGGGr   rb  c                   R   e Zd ZdZi Zej                            d          ej                            e	j
        dk     o ej                    dk    dd          d                         Zd	 Zd
 Zd Zd Zej        j        d             Zej        j        d             Zd Zd ZdS )TestLinprogHiGHSMIPr   rb   l        LinuxFzgh-16347)r  runr]  c           	         d}t          |          \  }}}}}dgt          |          z  }dgt          |          z  }t          |dz  |||| j        |          }	|                                |	j        z                      |dz  ||          }
t          j        |
d          }t          j	        
                    |                    d          |           t          j	        
                    |                    d          |           t          j	        
                    t          j        |                                          |           t          j	        
                    t          j        |d d d d df                                                   |           t          j	        
                    |	j        t          j        |	j                  d	
           d S )Nr%   r   r   r   rR   rm   rn   rq   r   r   r   rU  r6   r  r  )rS   r   r	   r   rB   r0   r=   r9   rn  r  r   diaground)r   rG   rP   rQ   rR   rJ   rI   rq   r   r   ssquares               r   	test_mip1zTestLinprogHiGHSMIP.test_mip13	  s    *1oo1a!CFF"cCFFl!!!F![kC C C __&//1a;;"""

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

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

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

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

""35"(35//"FFFFFr   c                    t          j        ddgddgg          }t          j        ddg          }t          j        ddg           }t          j        dt           j        fgt          |          z            }t          j        |          }t          ||||| j        |	          }t           j                            |j	        ddg           t           j                            |j
        d
           d S )Nr   r   r|   rb   r6   r  r   r   r  ry   )r9   rC   rf   r   	ones_liker	   r   r  r   r0   r/   r  s          r   	test_mip2zTestLinprogHiGHSMIP.test_mip2M	  s     x!R2r(+,,xR!!Xq!fArv;-#a&&011l1oo4![kC C C 	
""351a&111

""37B/////r   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t	          ||||| j        |          }t           j                            |j        d           t          j	        |j
        ddg          st          j	        |j
        ddg          sJ d S d S )	Nr6   r   r!   r   r  r   r  r   )r9   rC   rf   r   r	   r   r  r   r/   r  r0   r  s          r   	test_mip3zTestLinprogHiGHSMIP.test_mip3`	  s     x"a1a&1a&122x$$Xq!fbf+Q'cCFFl4![kC C C 	
""37B///{351a&))GR[A-G-GGGGGGGGr   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg          }dt           j        fgt          |          z  }ddg}t	          ||||| j        |	          }t           j                            |j        d
dg           t           j                            |j	        d           d S )Nr6   r   r}   r   r   )r{  irc   rt   r   r  g      @r{   ;   )
r9   rC   rf   r   r	   r   r  r   r0   r/   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4q	  s     x"bB8aV455x&&HaVbf+Q'!f4![kC C C 	
""353(333

""37B/////r   c           
         t          j        g dg          }t          j        dg          }t          j        g dg          }t          j        dg          }t          j        g d          }dt           j        fdt           j        fdg}g d}t          ||||||| j        |	          }t           j                            |j        g d
           t           j                            |j        d           |	                    dd           J |	                    dd           J |	                    dd           J d S )Nr  r{   )r%   r   r   r  )ry   r   r6   r   r   r?  )rR   rk   rl   rm   rn   rq   r   r   )r   rw   r   imip_node_countmip_dual_boundmip_gap)
r9   rC   rf   r	   r   r  r   r0   r/   rD  )	r   rk   rl   rm   rn   rR   rq   r   r   s	            r   	test_mip5zTestLinprogHiGHSMIP.test_mip5	  s:    x$$x}}x$$x~~H\\\""bf+26{F3ii4d#DK"-/ / / 	
""35)))444

""37C000 ww'..:::ww'..:::wwy$''33333r   c                 L   t          j        g dg dg dg dg          }t          j        g d          }t          j        g d          }dt           j        fgdz  }d	gdz  }t          ||||| j        |
          }t           j                            |j        d           d S )Nr  r  r  r  r  r!   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   rb   r  r  r{   r!  r{   r!   r   rt   r   rh  i>  )r9   rC   rf   r	   r   r  r   r/   )r   rm   rn   rR   rq   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip6	  s     x888999999999; < < x33344H00011bf+qc!e4![kC C C 	
""37D11111r   c                 4   t          j        g dg dg dg dg          }t          j        g d          }t          j        g d          }dt           j        fgdz  }d	gdz  }g d
}g }|D ]P}t          |t          t
          |||| j        |d|i	  	        }	|	d         }
|
|k    sJ |                    |
           Qt          j        t          j	        |                    }t          j
        |dk              sJ t          j
        |dk              rJ d S )Nr|  r}  r  r  r  r  r   rt   r   )re   g      ?g{Gz?r  mip_rel_gap)	rR   rk   rl   rm   rn   rq   r   r   r   ry  )r9   rC   rf   r	   rk   rl   r   rA   diffflipr_  )r   rm   rn   rR   rq   r   mip_rel_gapssol_mip_gapsr  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdown	  sd   
 x888999999999; < < x33344H00011bf+qc!e///' 		/ 		/KADt$T!'&1#0+">@ @ @C  	NM !K////.... GBGL1122	vi1n%%%%%6)q.)))))))r   c                 ,   t          j        g d          }t          j        ddgddgddgddgg          }t          j        g d          }t          |||d          }t           j                            |j        g d           |j        dk    sJ d S )	N)r   r   r6   r6   re   r:  )r   r!   r   r!   r   )rq   r   r   )r   r   r:  r   r   )r9   rC   r	   r  r   r0   r   )r   rR   rq   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuous	  s    
 H%%%&&C:SzC:SzJKKh|||,,a"-g? ? ? 	
""35...999zQr   c           	      $   ddg}ddgg}dg}t          |||ddg          }t          |||t          j        ddg                    }t          |||d          }t          |j        |j                   t          |j        |j                   dS )z
        Test that when integrality is a list of all zeros, linprog gives the
        same result as when it is an array of all zeros / integrality=None
        r   r6   r   r   r   N)r	   r9   r  r   r0   )r   rR   rk   rl   r@  rA  rR  s          r   test_bug_20584z"TestLinprogHiGHSMIP.test_bug_20584	  s    
 FQyvqt$QFCCCqt$BJ1v<N<NOOOqt$DAAATVTV$$$TVTV$$$$$r   N)re  rf  rg  r   r   r   ri  r  r  rk  maxsizerl  systemrm  rp  rr  ru  rz  xslowr  r  r  r  r~   r   r   rd  rd  /	  s5       FG[2[#+"7 #4&x((G3 (  * *G G	* * 
G*0 0 0&H H H"0 0 0 4 4 40 [2 2 2$ [#* #* #*J  % % % % %r   rd  c                   @    e Zd ZddiZej        Zej        Zej        ZdS )AutoscaleTestsra  TN)re  rf  rg  r   r   r  r"  r,  r~   r   r   r  r  	  s0        D!G&4M&4M&4MMMr   r  c                       e Zd ZdZd ZdS )TestAutoscaleIPr   c                 J    d| j         d<   t                              |           S )Nr3  r2  )r   r  r  r   s    r   r  zTestAutoscaleIP.test_bug_6139
  s"    #U++D111r   N)re  rf  rg  r   r  r~   r   r   r  r  	  s(        F2 2 2 2 2r   r  c                       e Zd ZdZdS )TestAutoscaleSimplexr   Nro  r~   r   r   r  r  
  s        FFFr   r  c                       e Zd ZdZd Zd ZdS )TestAutoscaleRSr   c                     t                      \  }}}}}}}t          |||||t          | j        | j        |	  	        }t          |||           t          |j        d           d S r:  r=  r  s	            r   r>  z2TestAutoscaleRS.test_nontrivial_problem_with_guess
  r?  r   c                     t                      \  }}}}}}}g d}t          |||||t          | j        | j        |	  	        }	t          |	j        d           d S rK  rL  rM  s
             r   rO  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess
  rP  r   N)re  rf  rg  r   r>  rO  r~   r   r   r  r  

  s7        F! ! !$ $ $ $ $r   r  c                   \    e Zd ZdZeZej        Zej        Zej	        Z	ej
        Zej        ZdS )RRTestsr   N)re  rf  rg  r   r   LCTr  test_RR_infeasibilityrZ  r'  r  	test_NFLCr  r~   r   r   r  r  !
  sD        F
CD'N%M6I1r   r  c                       e Zd ZddiZdS )	TestRRSVDr   SVDNr  r~   r   r   r  r  -
  s        E"GGGr   r  c                       e Zd ZddiZdS )TestRRPivotr   rV  Nr  r~   r   r   r  r  1
  s        G$GGGr   r  c                       e Zd ZddiZdS )TestRRIDr   IDNr  r~   r   r   r  r  5
  s        D!GGGr   r  )NNr'   r'   r   )r   )r   rt   rx   r   )Vrh  rk  rl  r%  numpyr9   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&   r4   rS   r`   rr   r   r   r   r   r   r   r   r   rk   rl   rm   rn   rq   r   ri  r'  rn  rq  rv  r}  r  r  r  r   r  r  r  r%  r*  r7  rU  rX  rb  rd  r  r  r  r  r  r  r  r  r~   r   r   <module>r     sD    


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