
    UgO~                       d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ ddlZddlZd
Z	 ddlmZ n# e$ r dZY nw xY wd
Z 	 ddl!Z!ddl"m#Z$ n# e$ r dZ Y nw xY wd Z%d Z&d Z'd Z(	 	 dYdZ)d Z*d Z+dZdZ,d Z-d[dZ.d Z/d Z0d Z1d Z2d  Z3d! Z4dZ5dZ6dZ7dZ8dZ9 G d" d#          Z:ej;        <                    d$           G d% d&e:                      Z=ej;        <                    d$           G d' d(e:                      Z>ej;        <                    d$           G d) d*e:                      Z? G d+ d,e:          Z@ G d- d.e=          ZA G d/ d0e=          ZB G d1 d2e=          ZC G d3 d4e>          ZDe r G d5 d6e>          ZEer G d7 d8e>          ZF G d9 d:e>          ZG G d; d<e>          ZHej;        <                    d$           G d= d>                      ZI G d? d@e?          ZJ G dA dBe?          ZK G dC dDe@          ZL G dE dFe@          ZM G dG dH          ZNej;        <                    d$           G dI dJ                      ZO G dK dLeO          ZP G dM dNeO          ZQ G dO dPeO          ZRej;        <                    d$           G dQ dR                      ZS G dS dTeS          ZT G dU dVeS          ZU G dW dXeS          ZVdS )\z"
Unit test for Linear Programming
    N)assert_assert_allcloseassert_equalassert_array_lessassert_warnssuppress_warnings)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarning)VisibleDeprecationWarningT)UmfpackWarningF)choleskyc                     t          | j         d           t          | j        |k     d           t          | j        dd           d S )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiters     `/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   !   sJ    O;<<<CK'!#NOOOQ JKKKKK    c                 ^    t          | j         d           t          | j        dd           d S )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler!   '   s2    O;<<<Q DEEEEEr   c                 ^    t          | j         d           t          | j        dd           d S )Nr      z!failed to report unbounded statusr   r    s    r   _assert_unboundedr$   -   s2    O;<<<Q CDDDDDr   c                 `    t          | j         d           t          | j        dv d           d S )Nr   r      z%failed to report optimization failure)r   r   r   r    s    r   )_assert_unable_to_find_basic_feasible_solr(   3   s7     O;<<<CJ& "IJJJJJr   :0yE>c                     | j         s!d| j         d| j         }t          |          t	          | j        d           |t          | j        |d||           |t          | j        |d||           d S d S )Nzlinprog status z, message: r   z*converged to an unexpected objective valueerr_msgrtolatolz#converged to an unexpected solution)r   r   messageAssertionErrorr   r   funx)r   desired_fun	desired_xr-   r.   msgs         r   _assert_successr6   =   s    
 ; "D
DDs{DDS!!!Q L!	. 	. 	. 	. y E!	. 	. 	. 	. 	. 	. r   c           	      D   t           j                            d           | | dz  dz   z  dz  }t          j        | dz            | dz  z  dz   }|                    | dz  | |           }t          j        | dz  | | f          }g }g }t          | dz            D ]^}|                                }d||ddddf<   |                    |	                                           |                    d           _t          |           D ]n}t          |           D ]\}|                                }d|dd||f<   |                    |	                                           |                    d           ]ot          |           D ]k}|                                }|dd|ddf         |dd|ddf<   |                    |	                                           |                    |           lt          |           D ]k}|                                }|dddd|f         |dddd|f<   |                    |	                                           |                    |           l|                                }|ddt          |           t          |           f         |ddt          |           t          |           f<   |                    |	                                           |                    |           |                                }|ddt          |           t          d|  dz
  d          f         |ddt          |           t          d|  dz
  d          f<   |                    |	                                           |                    |           t          j
        t          j        |          t                    }	t          j
        |t                    }
t           j                            |	j        d                   }|	|
|||fS )z
    Generates a linear program for which integer solutions represent an
    n x n magic square; binary decision variables represent the presence
    (or absence) of an integer 1 to n^2 in each position of the square.
    r   r   r   r'   Ndtype)nprandomseedarangereshapezerosrangecopyappendflattenarrayvstackfloatrandshape)nMnumbersr@   A_listb_listiA_rowjAbcs               r   magic_squarerU   Q   s    INN1	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
	qwqz""AaGQr   c                 h   t           j                            d           t           j                            | |f           }t          j        | | |z  f          }t          j        |           }t          |           D ]}|dz   }d||||z  ||z  f<   || z  ||<   t          j        || |z  f          }t          j        |          }t          |          D ]}|dz   }d|||d|f<   d||<   t          j        ||f          }	t          j        ||f          }
|	|
|                                fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    r   sizer   N)	r;   r<   r=   exponentialr@   rA   rF   hstackravel)mrJ   rT   ArowbrowrQ   j1AcolbcolrR   rS   s              r   lpgen_2drb      s<   
 INN1
)

aV

,
,,A8QAJD8A;;D1XX  U !QAb1f_a%Q8QAJD8A;;D1XX  UQ1WQ
	4,A
	4,Aa?r   c                 (   t           j                            |            d\  }}}t           j                            |          dz
  }t           j                            ||          dz
  }t           j                            |          dz
  }t           j                            ||          dz
  }t           j                            |          dz
  }t           j                            |           }	t           j                            |          }
t           j         |	|	t           j                                         k     <   t           j        |
|
t           j                                        k    <   t          j        |	|
f          j        }||||||fS )N)
      2         ?)r;   r<   r=   rH   infrF   T)r=   m_eqm_ubrJ   rT   A_ubb_ubA_eqb_eqlbubboundss               r   very_random_genrs      s.   INN4MD$
	q#A9>>$""3&D9>>$#D9>>$""3&D9>>$#D
)..

	B			B"$&BrRY^^ "BrBINNYBx  "FdD$f,,r   c                  \    g d} g dg dg dg dg}g d}g dg}dg}g d	}d
}| ||||||fS )N)r8      r'   )rw      	   )r   r8   r   )rd   rw      )rx   r8   r#   r'   )rz   rx   rv   rx   )r{   r   r   )gk椀?gs?r   gkL?gqY:^@ )rT   rl   rm   rn   ro   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   ru   ry   d   c                 P   t           j                            |            t           j                            dd||f          }t           j                            |          }t           j                            dd||f          }|||z  z  t           j                            dd|          z   }t          j        ||z             }d|d|<   t          j                            d|z  ||z   f          }	d}
t          |          D ]P}||dd|f         z  |	|
d|f<   d|	|
||z   f<   d|z  |dd|f         z  |	|
dz   d|f<   d|	|
dz   ||z   f<   |
dz  }
Q|	
                                }	t          j        d|z            }||ddd<   | |ddd<   dg|z  d	g|z  z   }||	||fS )
z
    Training data is {(x0, y0), (x1, y2), ..., (xn-1, yn-1)}
        x in R^d
        y in R
    n: number of training samples
    d: dimension of x, i.e. x in R^d
    phi: feature map R^d -> R^m
    m: dimension of feature space
    r   r   rW   h㈵>Nr   r8   NNr   N)r;   r<   r=   normalrandnonesscipysparse
lil_matrixrA   tocscr@   )r=   r\   drJ   phiw_truer2   yrT   rl   idxiirm   bndss                 r   l1_regression_probr      s    INN4
)

1aq!f

-
-CY__QF
	AQF++A#'RY--aA->>>A 	!AAbqbE<""AaC1:..D
CAhh  a2hS"1"WS!B$YS&1QQQU8+SUBQBYSUAbD[q::<<D8AaC==DDAJDAJ>!yk!m+DdD$r   c                    i fd}t          j        ddg          }ddgddgddgg}g d}t          ||||| j                  }t	          |d	dd
g           t          d         |d                    t          d         |d                    t          d         |d                    t          d         |d                    d S )Nc                 P   |                      d          }|                      d          }t          |                      d          dv            t          |                      d          t          d          v            t          t          |                      d          t                               t          t          |t
                               t          t          |t                               | d         d<   | d	         d	<   | d
         d
<   | d         d<   d S )Nr/   completephaser   r   r   r'   nitr2   r1   slackcon)popr   rA   
isinstanceintboolstr)r   r/   r   last_cbs      r   cbz!generic_callback_test.<locals>.cb   s    '')$$77:&&  F*+++!!U1XX-...
3775>>3//000
8T**+++
7C(()))3xUw<Ur   rz   r   r   r   rd   ru   r'   rl   rm   callbackmethod      2rx   r3   r4   r1   r2   r   r   )r;   rE   r
   r   r6   r   )selfr   rT   rl   rm   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 )Nrz   r   r   r   r   r   ekki-ekki-ekkirl   rm   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrl   rm   options)r;   rE   assert_raises
ValueErrorr
   pytestwarnsr   )rT   rl   rm   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 )Nrz   r   r   r   r   r   highsr   r   rx   r   )r;   rE   r
   r6   )rT   rl   rm   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   rx   r   r   
time_limit皙?)rT   rn   ro   rr   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rd   highs-dsrT   rn   ro   rr   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r8   )rr   r   z+The problem is infeasible. (HiGHS Status 8:r   r8   z+The problem is unbounded. (HiGHS Status 10:r#   )_highs_to_scipy_status_message:   zHello!z;The HiGHS status code was not recognized. (HiGHS Status 58:r'   z>HiGHS did not provide a status code. (HiGHS Status None: None))r
   r   r/   
startswithrU   lenscipy.optimize._linprog_highsr   )r   r5   rR   rS   rT   rL   rK   rr   r   r   r   r   r/   s                r   test_highs_status_messager   0  sV   
!G
$
$
$C
BC:????;!!#&&&&&&q//Aq!WaXAF#A,KS!G
AAAfW!{< < <C
1C:????;!!#&&&&&"oG
AAAfZ!# # #C
6C:????;!!#&&&&&
!GG
4
4
4C
7C:????;!!#&&&&&
"W
%
%
%C
7C:????;!!#&&&&&LLLLLL44RBBOFG
GCQ;;;;c"""""44T4@@OFG
JCQ;;;;c"""""""r   c                  <    t          ddgddggdgddg           d S )Nr   r8   r         rl   rm   r   )r
   r   r   r   test_bug_17380r   ]  s/    QF2q'$aVDDDDDDr   c                   <   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
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             ZUdR ZVdSS )T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_callbacky  s    d#####r   c                     t          dd          \  }}}t          |||| j        ddi          }t          |d           d S )Nre   dispTrl   rm   r   r   T*Pr3   rb   r
   r   r6   r   rR   rS   rT   r   s        r   	test_dispzLinprogCommonTests.test_disp|  sU    2r""1aaaa%tn. . .777777r   c                     ddg}ddgddgg}ddg}d}d}t          |||||f| j        | j        	          }t          |d
           d S )Nr8   r'   rz   r   r   rx   r   rz   N)rl   rm   rr   r   r   r   )r
   r   r   r6   )r   rT   rR   rS   	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rn   ro   r   r   )r   	TypeErrorr
   r   r   )r   rT   rn   ro   s       r   test_type_errorz"LinprogCommonTests.test_type_error  sT     Cuid![$,	@ 	@ 	@ 	@ 	@ 	@r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |||t
          t          || j        | j                  }t          |ddg           t          ||           d S )N      ?      @      r   r   r~   r   )r;   rE   rB   rh   r
   rn   ro   r   r   r6   r   )r   rT   rl   	b_ub_origrm   rr   r   s          r   test_aliasing_b_ubz%LinprogCommonTests.test_aliasing_b_ub  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @t<<<<	4(((((r   c           
      f   t          j        dg          }t          j        dgg          }t          j        dg          }|                                }dt           j        f}t	          |t
          t          |||| j        | j                  }t          |ddg           t          ||           d S )Nr   r   r   r   r#   r   )r;   rE   rB   rh   r
   rl   rm   r   r   r6   r   )r   rT   rn   	b_eq_origro   rr   r   s          r   test_aliasing_b_eqz%LinprogCommonTests.test_aliasing_b_eq  s     HcUOOx#  HcUOO	~~atT4![$,@ @ @qc::::	4(((((r   c           
          dg}dgg}dg}dgg}dg}d}t          ||||||| j        | j                  }t          |ddg           d S )Nr   r   g       @)            $@r   r   r   )r
   r   r   r6   r   rT   rl   rm   rn   ro   rr   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 d d d d i f fd	} fd j        D             }d	|d
<   t          t          |||||           d S )Nrz   r   r   r   r   r   c           
      @    t          | |||||j        |           d S Nr   r
   r   )rT   rl   rm   rn   ro   rr   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   )r;   rE   r   r   r   )r   rT   rl   rm   r  os   `     r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s    Hb"XAAA'zzDb	9 	9 	9 	9 	9 	9
 =<<<t|<<<&	_aTa	9 	9 	9 	9 	9 	9r   c           	      B   t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t           j                            t                    5  t          ||||| j        |          }d d d            n# 1 swxY w Y   t           j        	                    |j
        dd	g           t           j        	                    |j        d
           d S )Nr8   r   r#   r   r      r  r   rT   rl   rm   rr   r   r   ?ffffff@ffffff)r;   rE   rh   r   testingr   r   r
   r   r   r2   r1   r   rl   rm   rT   rr   r   r   s          r   test_integrality_without_highsz1LinprogCommonTests.test_integrality_without_highs  sZ    x"a1a&1a&122x$$Xq!fbf+Q'cCFFlZ$$_55 	G 	GADtF!%+G G GC	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	
""353*555

""37D11111s   !CCCc                     d fd	}t          t          |g dddg           t          j                                        5 }|                    t          d           t          t          |g dg d           d d d            n# 1 swxY w Y   t          t          |g dddg           t          t          |d	d
gd	d
ggd	d
g           t          t          |d	d
gd	ggd	g           t          t          |d	d
gd	d
ggd	d
g           t          t          |d	d
gd	ggd	g           t          t          |d	d
gd	gd	           d j        v r j        d         rd S t          t          |d	d
gt          j        d          d	           d S )Nc           
      J    t          | |||||j        j                   d S r  r
   r   r   rT   rl   rm   rn   ro   rr   r   s         r   r  z1LinprogCommonTests.test_invalid_inputs.<locals>.f  9    AtT4v;> > > > > >r   r   r   r#   r   r#   r'   rr   zCreating an ndarray from ragged)r   r  )r#   r'      r   r   r   r   )rl   rm   )rn   ro   _sparse_presolve)r   r   r#   )rl   ro   NNNNN)	r   r   r;   r  r   filterr   r   r@   )r   r  sups   `  r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  s   	> 	> 	> 	> 	> 	>
 	j!YYY7GHHHHZ))++ 	XsJJ02STTT*a;V;V;VWWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	j!YYY7HIIII 	j!aVAq6(!QHHHHj!aVA3%qcBBBBj!aVAq6(!QHHHHj!aVA3%qcBBBBj!aV1#A>>>> $,../0 /F 	j!aV"(92E2EANNNNNNs   8BB
B
c           	          d fd	}t           j                            d           d}d}t          j                            ||d          }t           j                            |          }t           j                            |          }|t           j                            |          z   }|t           j                            |          z
  }t          j        ||f          }	||z  }
 j        dv rYt          t          d j         d	          5  t          |||
|	 j         j        
           d d d            d S # 1 swxY w Y   d S i  j        } j        dv rd|d<   t          |||
|	 j        |
          }|j        sJ d S )Nc           
      J    t          | |||||j        j                   d S r  r  r  s         r   r  z5LinprogCommonTests.test_sparse_constraints.<locals>.f  r  r   r   r      rg   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r$  )r;   r<   r=   r   r   rH   r   column_stackr   r   r   r
   r   r   )r   r  r\   rJ   rn   x_validrT   rq   rp   rr   ro   r   r   s   `            r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  s   	> 	> 	> 	> 	> 	> 		q|  As++)//!$$IOOAry~~a(((ry~~a((("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>>EEc                     g d}g dg dg dg}g d}t           j                            d           d}t          |||| j        d|i	          }t          ||           t          |j        |           d S )
Nr'   ru   r#   r   r   r   r   r!  r#   r8   r   r   r#         @ru   r   r8   r   ru   rd   r'   r   r   r8         iX  r   r#   r   r   )r;   r<   r=   r
   r   r   r   r   )r   rT   rR   rS   r   r   s         r   test_maxiterzLinprogCommonTests.test_maxiter  s    !!!   " OO
	qaaa('24 4 4'W555SWg&&&&&r   c                    | j                             dd          }t          dgd| j        | j                   }t	          |dd           |rt          |j        d           t          g dg d| j        | j                   }t	          |d	g d
           |rt          |j        d           t          ddgddg| j        | j                   }t	          |dddg           |rt          |j        d           t          g dg dg dgddgg d| j        | j                   }t	          |dg d           |rt          |j        d           d S d S )NpresolveTr   )r   r   rr   r   r   r   r  ))r!  r!  )r8   r8   )r#   r#   r  )r!  r8   r#   )r   r#   r   )r   r   r   r   r   r   r   r   r   r|   ))r!  )r   rd   )      @r>  rn   ro   rr   r   r      )r   r|   r>  )r   getr
   r   r6   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 )	Nr9  Tr   r"  r:  r   r  ))r!  r   r   r  )r   rA  r
   r   r!   r   r   rB  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleM  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 )Nr9  Tr   r  r   r  c                 B    t          | |j        j                  }|S )Nr:  r  )rT   rr   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gu  s,    a%)[$,H H H
r   r   rT   rr   r   r   r   )r   rA  r   r;   rh   r   r   RuntimeWarningr	   
IndexErrorr
   r!   r   r   )r   rC  simplex_without_presolverT   bounds_1bounds_2rI  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2d  s    l&&z488'2?#Ot{i7O IIRVRV,f5bfWrvg.7# 	)    
 n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * n-- * *]:.. * *Aa))))* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * Ah!%dlD D DCs### )SWa(((Ah!%dlD D DCs### )SWa((((() )sl   C!B;/C;B?	?CB?	CCC6ED*E*D.	.E1D.	2EE	Ec                 d    ddg}t          || j        | j                  }t          |           d S )Nr8   r   r   )r
   r   r   r$   )r   rT   r   s      r   test_empty_constraint_1z*LinprogCommonTests.test_empty_constraint_1  s7    HaT\BBB#r   c                    g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |           | j                            dd          rt          |j        d           d S d S )N)r8   r   r8   r   r   r8   r   r:  r9  T)	r;   rh   r
   r   r   r$   rA  r   r   r   rT   rr   r   s       r   test_empty_constraint_2z*LinprogCommonTests.test_empty_constraint_2  s    NNbf+|Wg>a![$,@ @ @#<J-- 	%!$$$$$	% 	%r   c                     g d}dt           j        ft           j         dfddg}t          ||| j        | j                  }t          |g dd           d S )N)r   r8   r   r8   r   rT  r:  )r   r   r8   r   r   r4   r3   )r;   rh   r
   r   r   r6   rU  s       r   test_empty_constraint_3z*LinprogCommonTests.test_empty_constraint_3  sj    NNbf+|Wg>a![$,@ @ @}}}"EEEEEEr   c           
          t          j        ddg          dz  }ddgddgddgg}g d}t          |||t          t          t
          | j        | j                  }t          |ddd	g
           d S )Nr#   r   r8   r   r   r   r   irx   r   	r;   rE   r
   rn   ro   rr   r   r   r6   r   rT   rl   rm   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 )Nrx   r#   r   r8   r   r   )r   r8   r8   r   r!  gUUUUUU?gUUUUUU?r   r
   rn   ro   rr   r   r   r6   r\  s        r   test_inequality_constraints2z/LinprogCommonTests.test_inequality_constraints2  s     FARQ {{atT4![$,@ @ @uenEEEEEEr   c           
      :   ddg}d}t          |t          t          t          t          || j        | j                  }t          |ddg           ddg}t          |t          t          t          t          || j        | j                  }t          |ddg           d S )Nr   r   r   r   r4   )r
   rl   rm   rn   ro   r   r   r6   rU  s       r   test_bounds_simplez%LinprogCommonTests.test_bounds_simple  s    FatT4![$,@ @ @1v....&!atT4![$,@ @ @1v......r   c           
         t          j        dg          }t          j        dgg          }t          j        dg          }d}t          |t          t          |||| j        | j                  }t          |ddg           d S )Nr   r   )r   Nr   r#   r   r;   rE   r
   rl   rm   r   r   r6   r   rT   rn   ro   rr   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  rg   r   rX  r;   r   eyerE   rh   r
   rl   rm   r   r   r6   sumrf  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   re  rf  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   rX  ri  rf  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   rX  ri  rf  s         r   test_bounds_infinityz'LinprogCommonTests.test_bounds_infinity  s    GAJJvayyx			""6'26"atT4![$,@ @ @tFFFFFFr   c           
      `   t          j        ddg          dz  }t          j        ddgddggt           j                  }ddg}t           j         t           j        f}dt           j        f}||f}t	          |||t
          t          || j        | j                  }t          |d	d
dg           d S )Nr8   r'   rz   r   r   r9   rx   r   gm۶m&g$I$Ig%I$I@r   )
r;   rE   float64rh   r
   rn   ro   r   r   r6   )r   rT   rl   rm   r   r   rr   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
   rn   ro   r   r   r!   r   rT   rl   rm   rr   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 rw  )r
   rl   rm   r   r   r!   rf  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'   ru   r   ry  c                 ,    i | ]}|j         |         S r   r  r  s     r   r	  zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>  r
  r   Fr9  r   )r   r
   rn   ro   r   r!   r   rT   rl   rm   rr   r  r   s   `      r   test_bounds_equal_no_presolvez0LinprogCommonTests.test_bounds_equal_no_presolve  s    
 FAc
#1v&!<<<<t|<<<*atT4![!5 5 53r   c           
         d\  }}t           j                            d           t           j                            |          }d|d<   t           j                            ||          }d|d d df<   t           j                            |          }g dg}d}g d}t	          ||||||| j        | j                  }	t          |	d	           d S )
Nr  r   r   )r   r   r   r   r#   )r{   rd   r  )r{   Nr   r   gyMj#r   )r;   r<   r=   rH   r
   r   r   r6   
r   r\   rJ   rT   rn   ro   rl   rm   rr   r   s
             r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1&  s    1
	qINN1!y~~a##QQQT
y~~a  ~BBBatT4![$,@ @ @)<======r   c           
         | j         dv rt          j                     t          j                            d           d\  }}t          j                            |          }d|d<   t          j                            ||          }d|d d df<   t          j                            |          }t          j                            ||          }d|d d df<   t          j                            |          }d}t          ||||||| j         | j                  }	t          |	           | j        
                    dd	          r d
| j         vrt          |	j        d           d S d S d S )N>   r   	highs-ipmr   r&   r8   r   r   r   r9  Tr   )r   r   xfailr;   r<   r=   rH   r
   r   r$   rA  r   r   r  s
             r   test_zero_column_2z%LinprogCommonTests.test_zero_column_25  sU   ;333LNNN
	q1INN1!y~~a##QQQT
y~~a  y~~a##QQQT
y~~a  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
   rl   rm   rr   r   r   r6   r   rT   rn   ro   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1P  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   r_  )r   rl   rm   rT   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2X  sq    		999iii0yyIIatT4![$,@ @ @++++++r   c           
         d\  }}t           j                            |          }t           j                            ||          }d|dd d f<   t           j                            |          }t          |t          t
          ||t          | j        | j                  }t          |           | j        
                    dd          rt          |j        d           d S d S Nr&   r   r   r9  T)r;   r<   rH   r
   rl   rm   rr   r   r   r!   rA  r   r   )r   r\   rJ   rT   rn   ro   r   s          r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3`  s    1INN1y~~a##QT
y~~a  atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
         d\  }}t           j                            |          }t           j                            ||          }d|dd d f<   t           j                            |           }t          |||t          t
          t          | j        | j                  }t          |           | j        
                    dd          rt          |j        d           d S d S r  )r;   r<   rH   r
   rn   ro   rr   r   r   r!   rA  r   r   )r   r\   rJ   rT   rl   rm   r   s          r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4n  s    1INN1y~~a##QT
	q!!!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   r9  Tr   )
r
   rl   rm   rr   r   r   r!   rA  r   r   r  s        r   test_singleton_row_eq_1z*LinprogCommonTests.test_singleton_row_eq_1|  s    LLlllLLL,,,G||atT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          g d}g dg dg dg dg}g d}t          |t          t          ||t          | j        | j                  }t          |d           d S )	Nr  r  r  r  )r   r   r   r'   r   r'   r   r  r  s        r   test_singleton_row_eq_2z*LinprogCommonTests.test_singleton_row_eq_2  sw    LLlllLLL,,,G||atT4![$,@ @ @++++++r   c           
         g d}g dg dg dg dg}g d}g d}t          |||t          t          || j        | j                  }t          |           | j                            d	d
          rt          |j        d           d S d S )Nr  r  r  r8   r   r   r   r  )r   r   r   r'   r   r   r   r   r   r9  Tr   	r
   rn   ro   r   r   r!   rA  r   r   rz  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   rg   r   )r
   rn   ro   r   r   r6   rz  s         r   test_singleton_row_ub_2z*LinprogCommonTests.test_singleton_row_ub_2  s    LLlllMMM<<<H@@@atT4![$,@ @ @------r   c           
          ddg}ddgddgddgg}g d}t          |||t          t          t          | j        | j                  }t          |           d S )Nr8   r   r   )r   r   r=  r   )r
   rn   ro   rr   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!  rx   r   r9  Tr   r  rz  s         r   !test_infeasible_inequality_boundsz4LinprogCommonTests.test_infeasible_inequality_bounds  s    CuatT4![$,@ @ @3 <J-- 	%!$$$$$	% 	%r   c           
          t          j        ddg          dz  }ddgddgg}ddg}t          |||t          t          t
          | j        | j                  }t          |           d S )Nr   r8   r   r   )	r;   rE   r
   rn   ro   rr   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   Fr9  rJ  r   r!  )r   r
   r   r   r   r$   )r   rT   rr   r  r   s   `    r   *test_unbounded_below_no_presolve_correctedz=LinprogCommonTests.test_unbounded_below_no_presolve_corrected  s    C<<<<t|<<<*&![! ! ! ;+++Q'''''c"""""r   c           
         t          j        g d          }t          j        g dg dg dg          }t          j        g d          }g d}t          |||t          t          || j        | j                  }t          |           | j                                        	                    d          sDt          |j        d	         t           j                   t          |j        d
d         d           d
S d
S )|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        )r   r   r   r   r8   r8   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r8   r   r   r   )r   r   r   rT  rT  r   r   r   r8   N$   $The problem is (trivially) unboundedr;   rE   r
   rn   ro   r   r   r$   lowerr   r   r2   rh   r/   rz  s         r   *test_unbounded_no_nontrivial_constraints_1z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1  s%   
 H)))**x++++++,,,. / / x


##/ / /atT4![$,@ @ @#{  ""--g66 	ArBF+++SbS)?A A A A A	A 	Ar   c           
         t          j        g d          }t          j        g dg dg dg          }t          j        g d          }g d}t          |||t          t          || j        | j                  }t          |           | j                                        	                    d          sEt          |j        d	         t           j                    t          |j        d
d         d           d
S d
S )r  )r   r   r   r   r8   r   r  r  )r   r   r   r   r   r   r  )r   r   r   rT  rT  )Nr   r   r   r8   Nr  r  r  rz  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   rd   r   r8   r;  )re   r   r   )   re   r   )r   r   '  r   )r   r   r  gh㈵>Hz>)r4   r.   r-   r[  r\  s        r   test_cyclic_recoveryz'LinprogCommonTests.test_cyclic_recovery   s     H\\\""R'		

 atT4![$,@ @ @}}}4dKKKKKKr   c           
         t          j        g d          }t          j        g dg dg dg          }g d}d}d | j                                        D             }||d<   t	          |||t
          t          t          | j        |	          }| j        d
k    r2| j        	                    d          st          ||d                    d S t          |g d           d S )N)r{   9   ry   g      8@)rg   g      r   ry   )rg   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   rb  )r;   rE   r   itemsr
   rn   ro   rr   r   rA  r   r6   )r   rT   rl   rm   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                            |          }t           j                            ||          }t           j                            |          }d|dd d f         z  |dd d f<   |dxx         dz  cc<   t                      5 }|                    t
          d           t          |t          t          ||t          | j
        | j                  }d d d            n# 1 swxY w Y   t          |           d S )N)rd   rd   r   r   r8   A_eq does not appear...r   )r;   r<   rH   r   r%  r   r
   rl   rm   rr   r   r   r!   )r   r\   rJ   rT   rn   ro   r&  r   s           r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility%  sC    1INN1y~~a##y~~a  $r111u+oRURB   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	3s   AC00C47C4c           
          t                      \  }}}}}}}t          |||||t          | j        | j                  }t          |||           d S )Nr   r   )r   r
   rr   r   r   r6   	r   rT   rl   rm   rn   ro   r   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem8  sf     5G4H4H14tT66atT4![$,@ @ @6BBBBBBr   c                    t          dd          \  }}}t                      5 }|                    t          d           |                    t          d           |                    t
                     t          |||t          t          t          | j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )Nre   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rb   r   r%  r   rK  r   r
   rn   ro   rr   r   r   r6   )r   rl   rm   rT   r&  r   s         r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problem@  s
    !R((dA   	DCJJ(NOOOJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	777777s   BB00B47B4c                    g d}d\  }}|||d|dddd|ddg|dd|d|ddddddgdd||ddddddddgdddddd||dd|dgdddd|||d|dddgddddddd||dd|gddddddddd|||gg}g d}t                      5 }|                    t                     t          |t          t
          ||t          | j        | j                  }d d d            n# 1 swxY w Y   t          |ddd	           d S )
N)r   r'   ry      r'   r#   ru   r|   r   r@        rT  r   )r      i!   r   r   ir   i  ư>r  )r3   r.   r-   )
r   r%  r   r
   rl   rm   rr   r   r   r6   )r   rT   rJ   prn   ro   r&  r   s           r   test_network_flowz$LinprogCommonTests.test_network_flowM  s    54411aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a02 +**   	DCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	4dCCCCCCs   9ACCCc                 R   g d}ddgddgddgddgddgg}d\  }}||dddg|d||dgd||d|gddd||gg}g d}t                      5 }t          r|                    t                     |                    t          d	           |                    t
          d
           |                    t
          d           |                    t                     t          |t          t          |||| j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r#   r   r   r'   r   r#   r!  rT  )r~   r   r   r'   scipy.linalg.solve
Ill...r  Solving system with option...r   rx  r   )r   has_umfpackr%  r   rK  r   r   r
   rl   rm   r   r   r6   )	r   rT   rr   rJ   r  rn   ro   r&  r   s	            r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityb  s    OOFFFFF 11aO1aO1aO1aO	
 }}   		DC +

>***JJ~'CDDDJJ(ABBBJJ(GHHHJJ}%%%!T4tV!%dlD D DC		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 	,,,,,,s   B8DDDc           
          g d}g dg dg}ddg}t          |||t          t          t          | j        | j                  }t          |d           d S )	N)r   rz   r~   )r#   r   r   )r   r!  r#   rd   r@  r   ir   r_  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 )Nr/  r0  r1  r3  r4  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r3   r4   r.   r-   r  r  s        r   test_enzo_examplez$LinprogCommonTests.test_enzo_example  s     !!!   " atT4![$,@ @ @"@"@"@!	. 	. 	. 	. 	. 	.r   c                 B   g d}g dg dg dg dg dg}g d}t                      5 }|                    t          d           t          |t          t
          ||t          | j        | j        	          }d d d            n# 1 swxY w Y   t          |d
g d           d S )N)r  g333333@g%@r  g333333g%)r8   r8   r8   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r  皙?333333?r  r  r  r   gRQ)r  g?        r  r   r  r   )
r   r%  r   r
   rl   rm   rr   r   r   r6   )r   rT   rn   ro   r&  r   s         r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  s3   ///%%%""""""""""""	$
 *))   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	"@"@"@	B 	B 	B 	B 	B 	Bs   AB  BBc           
         d}t          j        |           }dt           j        z  t          j        d|dz             z  |dz   z  }t          j        t          j        |          dz
  t          j        |          f          }ddg}t          |t          t          ||t          | j        | j                  }t          |dt          j        |                     d S )Nre   r   r   r   r   r   )r;   r   pir>   rF   cossinr
   rl   rm   rr   r   r   r6   r@   )r   r\   rT   tmprn   ro   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 )Nrf   r   r   r  r   r   )r;   r   r  r>   r  r  rF   r
   rl   rm   rr   r   r   r$   )	r   r\   rT   r  row0row1rn   ro   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 )Nrf   r   r   c                 ,    i | ]}|j         |         S r   r  r  s     r   r	  zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>  r
  r   Fr9  r   )r;   r   r  r>   rF   r  r  r   r
   rl   rm   rr   r   r!   )r   r\   rT   r  rn   ro   r  r   s   `       r   &test_enzo_example_c_with_infeasibilityz9LinprogCommonTests.test_enzo_example_c_with_infeasibility  s    WQZZK"%i")A,,&!a%0y"&++/26#;;7881v<<<<t|<<<*atT4![!5 5 53r   c           
         t          j        g d          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g dg d	g          }t          j        d
d
g          }t          |||||t          | j        | j                  }t          |d
t          j        |          d           d S )N)ggQ뱿Mbp?r  r  r  )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   g      4@)r   r   r8   r   r8   r   )r   r   r8   r   r8   r   r   r   g>)r3   r4   r.   )r;   rE   r
   rr   r   r   r6   
zeros_like)r   rT   rl   rm   rn   ro   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   rl   rm   rn   ro   rr   r   r   r   z%Optimization terminated successfully.gdy=r.   )eqlinineqlinr  upper	marginalsresidual)rs   r
   r   r   r   r   r   r   r/   r   r2   r1   r   r   keysr   r;   ndarray)	r   rT   rl   rm   rn   ro   rr   r   r  s	            r   test_optimize_resultz'LinprogCommonTests.test_optimize_result  sl   ,;A,>,>)4tT6adDt#DKO O OCJ$+%%CK#JJKKKCE	37+++tce|+SW5AAAAtce|+SYUCCCC9 	D 	DCchhjj  !#c(;"7DDDDD!#c(:"6
CCCCC	D 	Dr   c           /         g d}d}d}d}t          j        g dddd|dd	dd
ddd
dd
ddddddgddd|ddd	d
d
dd
d
dddddddgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddd
d
dddd
||ddd|dddddgdddddd
d
dddd
||d|ddddgdd
dd ddd|d
d
ddddd|dddgddddd
dd
ddd|d
|ddd|ddgdd
d
d ddd||d
ddddddd|dgddddd
d
dddd||d
ddddd|gg          }t          j        g d!          }t          j        g d"          }t                      5 }|                    t          d#           |                    t
          d$           |                    t                     t          |||t          t          || j
        | j        %          }	d d d            n# 1 swxY w Y   t          |	d&'           d S )(N)r   r   r   r  r  r  r  r  r     r	  r	  r	  r	  r	  r   r   r   r   r   r   gqq?     g)r   gQr   r   rz   r   r   r   r8   r8   r   r8   r8   r   r   r   r   r   r   r   r   g333333rz   r8   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   gףp=
?r   gffffff?g @)r  r   r   r   r   r   r   r   r   r
  r
  r
  r
  r
  r
  r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   g^Zr   )r;   rE   r   r%  r   rK  r   r
   rn   ro   r   r   r6   )
r   rr   r  rI  hrl   rm   rT   r&  r   s
             r   test_bug_5400z LinprogCommonTests.test_bug_5400  sw   N N N xNNN4Ar1b!QAr1aAq!L1aAr2r1b"aAq!QJEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFb"aAr1aAq!Q1aK1aBAq!RAq!Q1aHCaAq"b!Q1aAq!L1aQAq!QAq!Q1aHBQ1aB1aAq!QJ1aRAq!Q2q!Q1aH7J K K: x 5 5 5 6 6 H 4 4 4 5 5   	DCJJ=? ? ?JJ~'BCCCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	)<======s   2A<F::F>F>c           
         t          j        g d          }t          j        g dg dg          }t          j        ddg          }t          j        g dg           }t          j        dg           }d}t          ||||||| j        | j        	          }t          |d
t          j        g d                     d S )Nr  )r   r  r  )     @r  r  g      @r  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r!  g@r!  r   r;   rE   r
   r   r   r6   )r   rT   rn   ro   rl   rm   rr   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139;  s     HYYYx'<'<'<=>>x9::2223444)%%%atT4![$,@ @ @ 	"$(<<<"8"8	: 	: 	: 	: 	: 	:r   c                    t          j        g dg          }t          j        dg          }t          j        g dg dg dg dg dg          }t          j        g d          }t          j        g d	g d
g          j        }t          j        g d          }t                      5 }t          r|                    t                     |                    t          d           |                    t          d           |                    t          d           |                    t                     t          ||||||| j        | j                  }d d d            n# 1 swxY w Y   d}	t          j        g d          }
t          ||	|
           d}t          |d d df         |z
  |j                   t          |j        |d d df         |z              d S )N)
r   r   r   g(\?r   ?r   r   g(\?r   g%䃞?)
r   r   r   zG?r   r   r   gɿr   g)\(̿)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   gQ?r   r   r   r   r   r   )
r   gQ      пr   r   r   g{Gz r   r   gQ?)
r   r   r   r   r   r   r   r  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?r  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?r  rg   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r  g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?z%Solving system with option 'cholesky'r  r  r   gV)
r  r  r  r  r  rg   r  r  r  r  r   r  r   r   )r;   rE   ri   r   r  r%  r   r   rK  r   r
   r   r   r6   r   r2   )r   rn   ro   rl   rm   rr   rT   r&  r   r3   r4   r.   s               r   test_bug_6690z LinprogCommonTests.test_bug_6690Q  s   
 x@@@ABBx!!x444***---999...
   x999::MMMHHH
    	 H         		DC +

>***JJ>@ @ @JJ(NOOOJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D 		D %H G G G H H		JJJJ &A,-su555#%1!455555s   )B.E##E'*E'c                 Z   t          d          \  }}}}}t                      5 }|                    t          d           |                    t          d           |                    t
                     t          |t          t          ||t          | j
        | j                  }d d d            n# 1 swxY w Y   d}t          ||           t          |                    |j                  |           t!          t#          j        |j        j                  dz
  |j                   d S )Nr#   r  r  r   -U?r   r   )rU   r   r%  r   rK  r   r
   rl   rm   rr   r   r   r6   r   dotr2   r   r;   r@   rX   )r   rn   ro   rT   _r&  r   r3   s           r   test_bug_7044z LinprogCommonTests.test_bug_7044}  sQ   
 +1oodAq!   	DCJJ(ABBBJJ~'BCCCJJ}%%%!T4tV!%dlD D DC		D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D "5555..."(35:..5su=====s   BB11B58B5c                    t          j        g d          }t          j        g dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg          }t          j        g d          }t          j        g dg          }t          j        dgg          }dgdz  }t          ||||||| j        | j                  }t          |dd            d S )!N)	r8   r   r   r   r   r   r   r   r   )	r   g     g     x@g     8g     Xg      g     }@g      Tg     Pr)	r   g     @g      E@g     H@g      m@g     @g     x@g     hg     L@)	r   g      jg     g     ؀@g     t@g     @g     g     p@g     K@)	r   g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@)	r   g     s@     zg     n@r$  g     @h@g     {g      Zg     z)	r   g     @g     8@g     v@g     b@g     ؉g     `@g     ȃ@g     r@)	r  r          r%  r%  r%  r%  r%  r%  )	r  r%  r   r%  r%  r%  r%  r%  r%  )	r  r%  r%  r   r%  r%  r%  r%  r%  )	r  r%  r%  r%  r   r%  r%  r%  r%  )	r  r%  r%  r%  r%  r   r%  r%  r%  )	r  r%  r%  r%  r%  r%  r   r%  r%  )	r  r%  r%  r%  r%  r%  r%  r   r%  )	r  r%  r%  r%  r%  r%  r%  r%  r   )	r  r   r  r  r  r  r  r  r  )	r  r  r   r  r  r  r  r  r  )	r  r  r  r   r  r  r  r  r  )	r  r  r  r  r   r  r  r  r  )	r  r  r  r  r  r   r  r  r  )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r   r  )	r  r  r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   )	r  r   r   r   r   r   r   r   r   r   r   ry   r   ghb$[@r  r3   r.   r  r   s           r   test_bug_7237z LinprogCommonTests.test_bug_7237  s   
 H11122xEEE???BBBBBBEEEAAA888888888888888888888888000000000000000000000000-  0 x 8 8 8 9 9 x===>??x"!#atT4![$,@ @ @$??????r   c                    t          j        g dg dg dg dg          }t          j        |j        d                   }t          j        |j        d                    }dg|j        d         z  }t                      5 }|                    t          d           |                    t                     t          |||t          t          || j        | j        	          }d d d            n# 1 swxY w Y   | j                            d
d          dk     r| j        dk    rt          |           d S t!          |dd           d S )N)X  i  iD4       3i)ii    @i  )r+  r   r   r*  r   )r)  r   r   r,  r   r   r   r   r  r   tolg&.>绽|=r   g r  r&  )r;   rE   r@   rI   r   r   r%  rK  r   r
   rn   ro   r   r   rA  r(   r6   )r   rl   rm   rT   rr   r&  r   s          r   test_bug_8174z LinprogCommonTests.test_bug_8174  s    x000000%%%%%%	' ( (
 x
1&&WTZ]###DJqM)   	DCJJ~'BCCCJJ}%%%!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D <E4((500T[I5M5M5c:::::C-@tLLLLLLs   ?A!C,,C03C0c                 T   t          j        g d          }t          j        d           }t          j        dgdgdgdgdgdgdgg          }t          j        g dg dg dg dg dg          }t          j        d	gd
gd
gd
gd
gg          }t                      5 }t          r|                    t                     |                    t          d           t          |||||t          | j
        | j                  }d d d            n# 1 swxY w Y   t          |d           d S )N)r   r   r   r   r   r   r   r|   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r8   )r  r   r   r   r   r   gUUUUUU)r   r  r   r   r   r   )r   r   r  r   r   r   r1  r   r   r  r   g?E@r   )r;   rE   identityr   r  r%  r   r   r
   rr   r   r   r6   r   rT   rl   rm   rn   ro   r&  r   s           r   test_bug_8174_2z"LinprogCommonTests.test_bug_8174_2  s    H***++Ax"tbTB4"tbTBCCx!!!(((&&&((('''
   x#aS1#s344   	DC +

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

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

>***JJ~'BCCCJJ}%%%1dD$f"&+t|E E ED	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E +DAAAA+DAAAAAAs%   BB99B= B=BFFFc           
          ddg}ddgg}dg}ddg}t          |t          t          |||| j        | j                  }t          |dd	gd
           d S )Nr   r!  r   rw   rv   r   r   r   g۶m۶m?gI$I$@rX  )r
   rl   rm   r   r   r6   rf  s         r   test_bug_8663z LinprogCommonTests.test_bug_8663  st     FByt\*atT4![$,@ @ @4yfEEEEEEr   c                 X   dg}dgdgg}ddg}dgdgdgg}g d}t                      5 }|                    t                     |                    t          d           t	          |||||t
          | j        | j        	          }d d d            n# 1 swxY w Y   t          |           d S )
Nr'   r   r!  r   r}   ry   r#   r   rd   r  r   )	r   r%  rK  r   r
   rr   r   r   r!   r3  s           r   test_bug_8664z LinprogCommonTests.test_bug_8664'  s    CaSz1vbTA3zz   	DCJJ~&&&JJ(GHHH!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D
 	3s   ABBBc           
      L   t          j        g d          }t          j        g dg dg          }t          j        ddg          }g d}t          |||t          t          || j        | j                  }t          |d           t          ||j	        z  |j
                   d	S )
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r8   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rT  rT  r   r   N)r;   rE   r
   rn   ro   r   r   r6   r   r2   r1   rz  s         r   test_bug_8973z LinprogCommonTests.test_bug_89737  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   rX  N)	r;   r@   rE   r
   rn   ro   r   r   r6   rz  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2H  s     HQKKx!x~~atT4![$,@ @ @t;;;;;;r   c           
      `   t          j        d          }t          j        dgg          }t          j        dg          }d}ddg}ddgddgg}ddg}dd	g}d
di}|                    | j                   t          |||t          t          || j        |          }t          |ddgd           dS )zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   r   r8   r'   rz   r   rx   r   r   Tr   rd   r   rX  N)
r;   r@   rE   updater   r
   rn   ro   r   r6   r  s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124X  s    
 HQKKx!x~~GQ!Q 1v
+TN	atT4![!5 5 5BxSAAAAAAr   c                    t          j        g dg dg dg dg dg dg          }t          j        g d          }t          j        dd	t          j        d
          fd          }t	                      5 }|                    t          d           t          |t          t          ||t          | j        | j                  }ddd           n# 1 swxY w Y   t          |g dd           dS )zq
        Test for redundancy removal tolerance issue
        https://github.com/scipy/scipy/issues/10349
        )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )      rd         f   r   r   r'   Naxisr  r   )   \   r  rO  r   rd   rT  rX  )r;   rE   concatenater@   r   r%  r   r
   rl   rm   rr   r   r   r6   )r   rn   ro   rT   r&  r   s         r   test_bug_10349z!LinprogCommonTests.test_bug_10349k  s^   
 x++++++++++++++++++- . . x55566NAq"(1++.T:::   	DCJJ(ABBB!T4tV!%dlD D DC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	'@'@'@bQQQQQQs   6ACCCdarwinz0Failing on some local macOS builds, see gh-13846reasonc                    g d}g dg dg dg dg dg dg dg d	g d
g dg
}g d}i }| j                             d          sddi}|                    | j                   t	                      5 }|                    t          d           t          r|                    t                     |                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d           t          |t          t          ||t          | j         |          }ddd           n# 1 swxY w Y   t          |j        d           dS )zA
        Test that autoscale fixes poorly-scaled problem
        )       r%  r[  r%  r[  r%  r%  r%  r%  r%  r%  r%  r%  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  r   r  r   r  r  r  r  r  r  r   r  )r  r  r   r  r   r  r  r  r  r  r  r  r   )
g     Ag      Ag     @Ag      A   Ar\  r\  r\  r\  r\  r   	autoscaleTr  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...r   Nl )r   r   rI  r   r   r%  r   r  r   rK  r   r
   rl   rm   rr   r   r1   )r   rT   rn   ro   r  r&  r   s          r   test_bug_10466z!LinprogCommonTests.test_bug_10466~  s    NMMDDDDDDDDDEEEDDDDDDDDDDDDDDDDDD	F     
 {%%g.. 	$d#A	   
	9CJJ(GHHH +

>***JJ~'CDDDJJ~'FGGGJJ~'@AAAJJ~'EFFFJJ}&ABBB!T4tV!%a9 9 9C
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 	-----s   1C/E,,E03E0c           	      $   ddg}ddgg}dg}t          |||ddg          }t          |||t          j        ddg                    }t          |||d          }t          |j        |j                   t          |j        |j                   dS )z
        Test that when integrality is a list of all zeros, linprog gives the
        same result as when it is an array of all zeros / integrality=None
        r   r8   r   r   r   N)r
   r;   asarrayr   r2   )r   rT   rl   rm   r<  r=  res3s          r   test_bug_20584z!LinprogCommonTests.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)W__name__
__module____qualname____doc__r   r   r   r   r   r   r   r  r  r'  r-  r7  rD  rF  rP  rR  rV  rY  r]  r`  rc  rg  rl  rn  rp  rr  ru  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  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  r9  r>  r@  rC  rE  rG  rJ  rV  r   markskipifsysplatformr_  rc  r   r   r   r   r   l  s1        $ $ $8 8 8	. 	. 	.@ @ @) ) )) ) ); ; ;9 9 9 2 2 2$O O O8  B' ' '% % %@% % %.') ') ')R  
% % %F F F
@ 
@ 
@F F F
/ 
/ 
/; ; ;G G G; ; ;G G GG G GN N N               "> > >% % %6, , ,, , ,% % %% % %
% 
% 
%, , ,% % %. . .	  	  	 % % %  # # # A A A(A A A(
L 
L 
L9 9 92     &C C C8 8 8D D D*- - ->	. 	. 	.. . .(B B B"	C 	C 	C  "     # # #"D D D.5> 5> 5>n: : :,*6 *6 *6X> > >$'@ '@ '@RM M M.; ; ;0? ? ?""B "B "BH	F 	F 	F      ) ) )"< < < B B B&R R R& [0!/  1 1&. &.1 1&.P% % % % %r   r   zignore::DeprecationWarningc                       e Zd ZdZdS )LinprogSimplexTestsr   Nrd  re  rf  r   r   r   r   rm  rm    s        FFFr   rm  c                       e Zd ZdZd ZdS )LinprogIPTestsr   c                 .    t          j        d           d S )Nz*Test is failing, but solver is deprecated.r   skipr   s    r   r_  zLinprogIPTests.test_bug_10466  s    @AAAAAr   N)rd  re  rf  r   r_  r   r   r   rp  rp    s-        FB B B B Br   rp  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.rr  r   s    r   r  zLinprogRSTests.test_bug_5400      677777r   c                 .    t          j        d           d S rw  rr  r   s    r   r>  zLinprogRSTests.test_bug_8662  rx  r   c                 .    t          j        d           d S rw  rr  r   s    r   r  z LinprogRSTests.test_network_flow  rx  r   N)rd  re  rf  r   r  r>  r  r   r   r   ru  ru    sF        F$8 8 88 8 88 8 8 8 8r   ru  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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   rz   r   r   r   r   r   r   r   r   rx   r   )r;   rE   r   NotImplementedErrorr
   r   r6   )r   r   rT   rl   rm   r   s         r   r   zLinprogHiGHSTests.test_callback  s    	 	 	Hb"XAAA'zz)7ADt!$+	7 	7 	7 	7addkBBB1a&AAAAAAr   r   r   r8   r   r9  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                 t      fd}|                      j                   t          t          ||           d S )Nc                 6    t          dj        |            d S )Nr   r   r  )r   r   s    r   r  z7LinprogHiGHSTests.test_invalid_option_values.<locals>.f   s     Adk7;;;;;;r   r  )rI  r   r   r   )r   r   r  s   `  r   test_invalid_option_valuesz,LinprogHiGHSTests.test_invalid_option_values  sK    	< 	< 	< 	< 	<t|$$$_a999999r   c                     t          d          \  }}}}}d}t          ||||| j        | j                  }t	          |j        dk    | j        dk               d S )Nr'   r   r?  r   r  )rU   r
   r   r   r   crossover_nit)r   rn   ro   rT   r!  rr   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover  sl    *1oodAq!ad#DKO O O 	S&!+T[K-GHHHHHr   r!  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   r=   r  c           	      D    t          | j                  j        S Nr   r
   r   r1   )r2   rn   rl   ro   rr   rT   r   s    r   f_bubz/LinprogHiGHSTests.test_marginals.<locals>.f_bub  s.    1dAtT6"&+/ / //23r   z3-point)r   f0c           	      D    t          | j                  j        S r  r  )r2   rn   rl   rm   rr   rT   r   s    r   f_beqz/LinprogHiGHSTests.test_marginals.<locals>.f_beq  s.    1dD$6"&+/ / //23r   c           	      z    t          j        | g          j        }t          |j                  j        S r  r;   rE   ri   r
   r   r1   )	r2   rr   rn   rl   ro   rm   rT   r   rq   s	     r   f_lbz.LinprogHiGHSTests.test_marginals.<locals>.f_lb'  sD    Xq"g&&(F1dD$f"&+/ / //23r   ignore)invalidc           	      z    t          j        | g          j        }t          |j                  j        S r  r  )	r2   rr   rn   rl   ro   rm   rT   rp   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ub4  sD    Xr1g&&(F1dD$f"&+/ / //23r   )rs   r
   r   r   ri   r   r1   r   r   r  r  r;   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrn   rl   ro   rm   rr   rT   rp   rq   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  )rs   r
   r   r   ri   r   r  r  r  r  r   )	r   rT   rl   rm   rn   ro   rr   r   resids	            r   test_dual_feasibilityz'LinprogHiGHSTests.test_dual_feasibility?  s    ,;,D,D,D)4tT6adDt#DKO O O
 dfs{444#)--.$% $% 	qu------r   c           
          t          d          \  }}}}}}t          ||||||| j        | j                  }t	          j        |j        j        |||j        z  z
  z  d          sJ d S )Nr  r  r  r   )	rs   r
   r   r   r;   allcloser   r  r2   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slacknessM  s    ,;,D,D,D)4tT6adDt#DKO O O {3;0D4#%<4GH!LLLLLLLr   N)rd  re  rf  r   r   rh  parametrizer  r  	fail_slowr  r  r  r   r   r   r|  r|    s        
B 
B 
B [Y("o%rl)2.+R0;R@=rB92>BFK 	! 	!: :	! 	!:I I I [1/4 /4 /4b. . .	M 	M 	M 	M 	M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.rr  r   s    r   r  z'TestLinprogSimplexDefault.test_bug_5400c      455555r   c                 .    t          j        d           d S r  rr  r   s    r   test_bug_7237_low_tolz/TestLinprogSimplexDefault.test_bug_7237_low_tolf  s     	455555r   c                     | j                             ddi           t          j        t                    5  t                                                       d d d            d S # 1 swxY w Y   d S Nr-  r  r   rI  r   r   r   superr/  r   	__class__s    r   test_bug_8174_low_tolz/TestLinprogSimplexDefault.test_bug_8174_low_tolk       	UEN+++\/** 	$ 	$GG!!###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   !A%%A),A))rd  re  rf  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_methodu  s    r   c                 .    t          j        d           d S r  rr  r   s    r   r  z%TestLinprogSimplexBland.test_bug_5400x  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   rI  r   r	   r0   r   r   r  r/  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)rd  re  rf  r  r  r  r  r  s   @r   r  r  s  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 )Nr9  Fr  r   s    r   r  z)TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   ru   linuxz"Fails with warning on 32-bit linux)	conditionrY  c                 H    t                                                       d S r   )r  r  r  s    r   r  z*TestLinprogSimplexNoPresolve.test_bug_5400  s!     	r   c                     | j                             ddi           t          j        t          d          5  t                                                      cd d d            S # 1 swxY w Y   d S )Nr-  r  zlinprog status 4r   )r   rI  r   r	   r0   r  r  r  s    r   test_bug_6139_low_tolz2TestLinprogSimplexNoPresolve.test_bug_6139_low_tol  s    
 	UEN+++]>1CDDD 	+ 	+77((**	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s    A&&A*-A*c                 .    t          j        d           d S r  rr  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 presolverr  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:::::r   c                 .    t          j        d           d S r  rr  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r  r   )rd  re  rf  r  r;   intpitemsize	is_32_bitrj  rk  r   is_linuxr   rh  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   FrW  z:Fails on some macOS builds for reason not relevant to testrX  c                 H    t                                                       d S r   r  r  r  s    r   r  z TestLinprogIPDense.test_bug_6139  s!    
 	r   )rd  re  rf  r   r   rh  ri  rj  rk  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rd  re  rf  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.rr  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KLMMMMMr   N)rd  re  rf  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_posrW  /Fails on macOS x86 Accelerate builds (gh-20510)rX  rThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                 H    t                                                       d S r   r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6139  !     	r   Fails with ATLAS, see gh-7877c                 H    t                                                       d S r   r  r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6690  !     	r   c                     t          d          \  }}}}}d}t                      5 }t          r|                    t                     |                    t
          d           |                    t          d            fd j        D             }d|d<   t          |t          t          ||| j        |          }d d d            n# 1 swxY w Y   t          |d	
           d S )Nr#   r   zMatrix is exactly singularr  c                 ,    i | ]}|j         |         S r   r  r  s     r   r	  zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>  "    @@@Cdl3'@@@r   Fr9  r   r  r   )rU   r   r  r%  r   r   r   r   r
   rl   rm   r   r6   )	r   rn   ro   rT   r!  rr   r&  r  r   s	   `        r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve  s'   *1oodAq!   
	9C +

>***JJ(*FGGGJJ(GHHH@@@@4<@@@A!AjM!T4tV!%a9 9 9C
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 
	9 	555555s   BC		CCc                     t          d          \  }}}}}t                      5 }|                    t          d           |                    t          d            fd j        D             }d}|D ]C}||d<   t          |t          t          ||t           j	        |          }	t          |	d	           D	 d d d            d S # 1 swxY w Y   d S )
Nr#   r  zInvalid permc_spec optionc                 ,    i | ]}|j         |         S r   r  r  s     r   r	  zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>  r  r   )NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r  r   )rU   r   r%  r   r   r
   rl   rm   rr   r   r6   )
r   rn   ro   rT   r!  r&  r  permc_specsr  r   s
   `         r   test_sparse_solve_optionsz-TestLinprogIPSparse.test_sparse_solve_options  s.   *1oodAq!   	>CJJ(ABBBJJ(CDDD@@@@4<@@@A7K * > >
",,atT4%)[!= = ======	>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   BCC	C	)rd  re  rf  r   r   rh  ri  rj  rk  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#  rW  r  rX  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=Falserr  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibility  s    LMMMMMr   r  c                 H    t                                                       d S r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6690  r  r   )rd  re  rf  r   r   rh  ri  rj  rk  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  re   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r+   )has_cholmodr  rb   r
   r   r   r1   )r   r   rR   rS   rT   r<  r=  s          r   test_solver_selectz(TestLinprogIPSpecific.test_solver_select  s     	L!%488GG 	L!%599GG!%5UKKG2r""1aqqqgNNNqqq===$( J"	0 	0 	0 	0 	0 	0r   c                 j    dg}dg}t          ||| j        ddd          }t          |d           d S )Nr8   r  FT)r9  r   rJ  r   )r
   r   r6   rU  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 )Nre   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_cholesky3  sV    2r""1aaaa)402 2 2777777r   c           
      v   t          dd          \  }}}t                      5 }|                    t          d           |                    t          d           |                    t
          d           t          |||| j        ddd          }d d d            n# 1 swxY w Y   t          |d	           d S )
Nre   r  r  r^  T)ipr   r   r   r   )	rb   r   r%  rK  r   r   r
   r   r6   )r   rR   rS   rT   r&  r   s         r   test_alternate_initial_pointz2TestLinprogIPSpecific.test_alternate_initial_point:  s    2r""1a   	>CJJ~'CDDDJJ(GHHHJJ}&ABBB!!!DK)-t"<"<> > >C		> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	777777s   A.BB!$B!c                 `   dg}dgdgg}ddg}dgdgdgg}g d}t                      5 }|                    t                     |                    t          d           t	          |||||t
          | j        d	d
i          }d d d            n# 1 swxY w Y   t          |j         d           d S )Nr'   r   r!  r   r}   ry   rB  r  r9  Fr   r   )	r   r%  rK  r   r
   rr   r   r   r   r3  s           r   rC  z#TestLinprogIPSpecific.test_bug_8664F  s   CaSz1vbTA3zz   	KCJJ~&&&JJ(GHHH!T4tV!%z56IK K KC	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K
 	CK!?@@@@@s   ABBBN)	rd  re  rf  r   r  r  r  r  rC  r   r   r   r  r    si        F0 0 0- - -8 8 8
8 
8 
8A A A A Ar   r  c                   <    e Zd Zi Zd Zd Zd Zd Zd Zd Z	d Z
dS )	TestLinprogRSCommonc                 .    t          j        d           d S rw  rr  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland]  rx  r   c                     t                      \  }}}}}}}t          |||||t          | j        | j        |	  	        }t          |||           t          |j        d           d S Nr   r   x0r   r   r   r
   rr   r   r   r6   r   r   r  s	            r   "test_nontrivial_problem_with_guessz6TestLinprogRSCommon.test_nontrivial_problem_with_guess`  w    4F4H4H14tT66atT4![$,6K K K6BBBBSWa     r   c                     t                      \  }}}}}}}g d}t          ||||||| j        | j        |	  	        }	t	          |	||           t          |	j        d           d S )N)r   r   r   r   r  r   r   r   r
   r   r   r6   r   r   
r   rT   rl   rm   rn   ro   r   r   rr   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesg  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   r  r  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variableso  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   r  r   r  r  r   r   )	r   r;   rE   r
   r   r   r6   r   r   r  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablew  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#   rg   r  rx   r   r
   rr   r   r   r   r   
r   rT   rl   rm   rn   ro   r   r   	bad_guessr   s
             r   &test_nontrivial_problem_with_bad_guessz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guess  k    4F4H4H14tT66!MM	atT4![$,9N N NSZ#####r   c                    t          d          \  }}}}}t          j        j        |j         }t                      5 }|                    t          d           |                    t          d           |                    t                     t          |||| j                  }t          |||| j        |j                  }t          ||z   ||| j        |j                  }	d d d            n# 1 swxY w Y   t          |d           t          |j        d           t          |	           t!          |	j        |j        k                d S )	Nr#   r  r  )rn   ro   r   )rn   ro   r   r  r  r   r   )rU   r;   r<   rH   rI   r   r%  r   rK  r   r
   r   r2   r6   r   r   r   )
r   rR   rS   rT   r!  r  r&  r   r=  rb  s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  sw   $Q1aAINAG$   	PCJJ(ABBBJJ~'BCCCJJ}%%%!!!DK@@@C111T[SUKKKD1q5qqOOOD	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	+6666TXq!!!37"#####s   B(C00C47C4N)rd  re  rf  r   r  r  r  r  r   r&  r)  r   r   r   r  r  Z  s        G8 8 8! ! !! ! !! ! !	! 	! 	!$ $ $$ $ $ $ $r   r  c                       e Zd ZddiZdS )TestLinprogRSBlandpivotr  Nr  r   r   r   r+  r+    s         GGGr   r+  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.
        )rl   rm   rr   r   r   r   Ngưc                 4    g | ]\  }}|t           j        n|S r   r;   rh   r  rp   rq   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  r1  r2  s      r   r3  zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>  s<     !5 !5 !5%+R -/J"&BI !5 !5 !5r   )r   r
   r   r   r   r   r   r2   r;   allr   )r   rT   rl   rm   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)rd  re  rf  r   r   r6  r   r   r   r.  r.    s-        FG7 7 7 7 7r   r.  c                       e Zd ZdZi ZdS )TestLinprogHiGHSIPMr  N)rd  re  rf  r   r   r   r   r   r8  r8    s        FGGGr   r8  c                      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        ej                            d          d                         Zej        j        d             Zd ZdS )TestLinprogHiGHSMIPr   r!  l        LinuxFzgh-16347)r  runrY  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   rT   rn   ro   rr   r   r   r   rQ  r8   r  r  )rU   r   r
   r   rD   r2   r?   r;   rk  r  r   diaground)r   rJ   rR   rS   rT   rL   rK   rr   r   r   ssquares               r   	test_mip1zTestLinprogHiGHSMIP.test_mip1  s    *1oo1a!CFF"cCFFl!!!F![kC C C __&//1a;;"""

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

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

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

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

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

""37B/////r   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg           }dt           j        fgt          |          z  }dgt          |          z  }t	          ||||| j        |          }t           j                            |j        d           t          j	        |j
        ddg          st          j	        |j
        ddg          sJ d S d S )	Nr8   r   r#   r   r  r   r  r   )r;   rE   rh   r   r
   r   r  r   r1   r  r2   r  s          r   	test_mip3zTestLinprogHiGHSMIP.test_mip3  s     x"a1a&1a&122x$$Xq!fbf+Q'cCFFl4![kC C C 	
""37B///{351a&))GR[A-G-GGGGGGGGr   c                    t          j        ddgddgddgg          }t          j        g d          }t          j        ddg          }dt           j        fgt          |          z  }ddg}t	          ||||| j        |	          }t           j                            |j        d
dg           t           j                            |j	        d           d S )Nr8   r   r~   r   r   )rx  ire   ru   r   r  g      @r|   ;   )
r;   rE   rh   r   r
   r   r  r   r2   r1   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4
	  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  )rz   r   r8   r   r   r<  )rT   rl   rm   rn   ro   rr   r   r   )r   rx   r   imip_node_countmip_dual_boundmip_gap)
r;   rE   rh   r
   r   r  r   r2   r1   rA  )	r   rl   rm   rn   ro   rT   rr   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   x   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   rE     r     r#   rx  rV  '   r  rU     rV           r  rx        r[  &   rV  rV  )   rV  rZ  r  r  ra  r  rV  i  i(  i:,  i/  r   rd   rE     r|   r!  r|   r#   r   ru   r   r>  i>  )r;   rE   rh   r
   r   r  r   r1   )r   rn   ro   rT   rr   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip62	  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 )NrT  rX  r^  rb  rd  re  r   ru   r   )rg   g      ?g{Gz?gMbP?mip_rel_gap)	rT   rl   rm   rn   ro   rr   r   r   r   rP  )r;   rE   rh   r
   rl   rm   r   rC   diffflipr5  )r   rn   ro   rT   rr   r   mip_rel_gapssol_mip_gapsri  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdownF	  sd   
 x888999999999; < < x33344H00011bf+qc!e///' 		/ 		/KADt$T!'&1#0+">@ @ @C  	NM !K////.... GBGL1122	vi1n%%%%%6)q.)))))))r   c                 ,   t          j        g d          }t          j        ddgddgddgddgg          }t          j        g d          }t          |||d          }t           j                            |j        g d           |j        dk    sJ d S )	N)r   r   r8   r8   rg   r6  )r   r#   r   r#   r   )rr   r   r   )r   r   r6  r   r   )r;   rE   r
   r  r   r2   r   )r   rT   rr   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuousl	  s    
 H%%%&&C:SzC:SzJKKh|||,,a"-g? ? ? 	
""35...999zQr   N)rd  re  rf  r   r   r   rh  r  r  rj  maxsizerk  systemrC  rG  rI  rL  rQ  slowtimeoutrg  xslowrp  rr  r   r   r   r:  r:    sA       FG[1[#+"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   r:  c                   @    e Zd ZddiZej        Zej        Zej        ZdS )AutoscaleTestsr]  TN)rd  re  rf  r   r   r  r  r'  r   r   r   ry  ry  	  s0        D!G&4M&4M&4MMMr   ry  c                       e Zd ZdZd ZdS )TestAutoscaleIPr   c                 J    d| j         d<   t                              |           S )Nr.  r-  )r   ry  r  r   s    r   r  zTestAutoscaleIP.test_bug_6139	  s"    #U++D111r   N)rd  re  rf  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   Nrn  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 r"  r#  r$  s
             r   r&  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess	  r'  r   N)rd  re  rf  r   r  r&  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)rd  re  rf  r   r   LCTr  test_RR_infeasibilityrV  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   r,  Nr  r   r   r   r  r  	  s        G$GGGr   r  c                       e Zd ZddiZdS )TestRRIDr   IDNr  r   r   r   r  r  	  s        D!GGGr   r  )NNr)   r)   )r   )r   ru   ry   r   )Wrg  rj  rk  numpyr;   numpy.testingr   r   r   r   r   r   r   r	   r   scipy.optimizer
   r   scipy.optimize._numdiffr   scipy.sparse.linalgr   scipy.linalgr   scipy._lib._utilr   scipy.sparser   r  scikits.umfpackr   ImportErrorr  sksparsesksparse.cholmodr   cholmodr   r!   r$   r(   r6   rU   rb   rs   r   r   r   r   r   r   r   r   rl   rm   rn   ro   rr   r   rh  filterwarningsrm  rp  ru  r|  r  r  r  r  r  r  r  r  r  r  r+  r.  r8  r:  ry  r{  r~  r  r  r  r  r  r   r   r   <module>r     sZ    


     O O O O O O O O O O O O O O O O * * * * * * 3 3 3 3 3 3 3 3 5 5 5 5 5 5 1 1 1 1 1 1 & & & & & & 6 6 6 6 6 6     .......   KKK OOO4444444   KKKL L LF F FE E EK K K 6:$(. . . .(? ? ?D  6- - - - 5 5 5       F4 4 4>9 9 9> > >% % %*# *# *#ZE E E 	I% I% I% I% I% I% I% I%b* 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:nM nM nM nM nM* nM nM nMl$ $ $ $ $ 3 $ $ $*( ( ( ( (1 ( ( ("%; %; %; %; %;#6 %; %; %;Z	  	  	  	  	  	  	  	   55 5 5 5 5^ 5 5 5  NN N N N N^ N N N3> 3> 3> 3> 3>. 3> 3> 3>l         .      , 899<A <A <A <A <A <A <A :9<AH<$ <$ <$ <$ <$. <$ <$ <$~! ! ! ! ! ! ! !7 7 7 7 7"3 7 7 78    +   q q q q q q q qr 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<