
    bi                    8   d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ ddlZddlZd
Z	 ddlmZ d
Z	 ddl Z ddl!m"Z# d Z$d Z%d Z&d Z'	 	 dUdZ(dVdZ)d Z*dWdZ+d Z,dXdZ-d Z.d Z/d Z0d Z1d Z2d Z3dZ4dZ5dZ6dZ7dZ8 G d d      Z9ejt                  jw                  d        G d! d"e9             Z<ejt                  jw                  d        G d# d$e9             Z=ejt                  jw                  d        G d% d&e9             Z> G d' d(e9      Z? G d) d*e<      Z@ G d+ d,e<      ZA G d- d.e<      ZB G d/ d0e=      ZCer G d1 d2e=      ZDer G d3 d4e=      ZE G d5 d6e=      ZF G d7 d8e=      ZGejt                  jw                  d        G d9 d:             ZH G d; d<e>      ZI G d= d>e>      ZJ G d? d@e?      ZK G dA dBe?      ZL G dC dD      ZMejt                  jw                  d        G dE dF             ZN G dG dHeN      ZO G dI dJeN      ZP G dK dLeN      ZQejt                  jw                  d        G dM dN             ZR G dO dPeR      ZS G dQ dReR      ZT G dS dTeR      ZUy# e$ r dZY 4w xY w# e$ r dZY 5w xY w)Yz"
Unit test for Linear Programming
    N)VisibleDeprecationWarning)assert_assert_allcloseassert_equalassert_array_less)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarningT)UmfpackWarningF)choleskyc                     t        | j                   d       t        | j                  |k  d       t        | j                  dd       y )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiters     \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   "   s8    O;<CKK'!#NOQ JK    c                 `    t        | j                   d       t        | j                  dd       y )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler   (   s$    O;<Q DEr   c                 `    t        | j                   d       t        | j                  dd       y )Nr      z!failed to report unbounded statusr   r   s    r   _assert_unboundedr"   .   s$    O;<Q CDr   c                 b    t        | j                   d       t        | j                  dv d       y )Nr   r      z%failed to report optimization failure)r   r   r   r   s    r   )_assert_unable_to_find_basic_feasible_solr&   4   s)     O;<CJJ& "IJr   c                    | j                   s'd| j                   d| j                   }t        |      t	        | j                  d       |t        | j                  |d||       |t        | j                  |d||       y y )Nzlinprog status z, message: r   z*converged to an unexpected objective valueerr_msgrtolatolz#converged to an unexpected solution)r   r   messageAssertionErrorr   r   funx)r   desired_fun	desired_xr*   r+   msgs         r   _assert_successr3   >   s    
 ;;

|;s{{mDS!!Q L!	. y E!	. r   c           	         |t         j                  j                  d      n|}| | dz  dz   z  dz  }t        j                  | dz        | dz  z  dz   }|j	                  | dz  | |       }t        j
                  | dz  | | f      }g }g }t        | dz        D ]N  }|j                         }d||ddddf<   |j                  |j                                |j                  d       P t        |       D ]\  }t        |       D ]L  }	|j                         }d|dd||	f<   |j                  |j                                |j                  d       N ^ t        |       D ]X  }|j                         }|dd|ddf   |dd|ddf<   |j                  |j                                |j                  |       Z t        |       D ]X  }|j                         }|dddd|f   |dddd|f<   |j                  |j                                |j                  |       Z |j                         }|ddt        |       t        |       f   |ddt        |       t        |       f<   |j                  |j                                |j                  |       |j                         }|ddt        |       t        d|  dz
  d      f   |ddt        |       t        d|  dz
  d      f<   |j                  |j                                |j                  |       t        j                  t        j                  |      t              }
t        j                  |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.
    Nl   g-hP r   r   r%   dtype)nprandomdefault_rngarangereshapezerosrangecopyappendflattenarrayvstackfloatshape)nrngMnumbersr=   A_listb_listiA_rowjAbcs                r   magic_squarerR   R   s    :="))

 4
5#C	QTAXAii1oA%)GooadAq)GHHadAq\"EFF 1a4[ 

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

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

 Aq)aAgemmo&a	 JJLE#*1eAha+@#AE!U1XuQx
 
MM%--/"
MM!JJLE58U2rAvr223 
!U1XuR!a,
,-
MM%--/"
MM!
6"%0A
u%A

1771:AaGQr   c                 H   t         j                  j                  d      }|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      }|
||j                         fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    l   -!j sizer   N)	r8   r9   r:   exponentialr=   r>   rC   hstackravel)mrF   rG   rQ   ArowbrowrN   j1AcolbcolrO   rP   s               r   lpgen_2dr_      s+   
 ))

 4
5C
//1v/
&&A88QAJD88A;D1X U !QAb1f_a%Q
 88QAJD88A;D1X UQ1WQ
 			4,A
		4,Aa?r   c                 H   t         j                  j                  d      }d\  }}}|j                  |      dz
  }|j                  ||f      dz
  }|j                  |      dz
  }|j                  ||f      dz
  }|j                  |      dz
  }	|j                  |       }
|j                  |      }t         j                   |
|
|j                          k  <   t         j                  |||j                         kD  <   t        j                  |
|f      j
                  }|||||	|fS )Nl   ) )
      2         ?)r8   r9   r:   infrC   T)seedrG   m_eqm_ubrF   rQ   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genrq      s   
))


0CMD$

1cA::tQi $D::dCD::tQi $D::dCD
**Q-B	AB ffWBrSZZ\MFFBrCJJLYY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)r5      r%   )ru      	   )r   r5   r   )ra   ru      )rv   r5   r!   r%   )rx   rv   rt   rv   )ry   r   r   )gk椀?gs?r   gkL?gqY:^@ )rQ   rj   rk   rl   rm   x_starf_stars          r   nontrivial_problemr      sO    AD DD4D5FFdD$ff44r   c                    t         j                  j                  d      }|j                  dd||f      }|j	                  |      }|j                  dd||f      }|||z  z  |j                  dd|      z   }t        j
                  ||z         }	d|	d| t        j                  j                  d|z  ||z   f      }
d}t        |      D ]J  }||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  }L |
j                         }
t        j                  d|z        }||ddd<   | |ddd<   d	g|z  d
g|z  z   }|	|
||fS )z
    Training data is {(x0, y0), (x1, y2), ..., (xn-1, yn-1)}
        x in R^d
        y in R
    n: number of training samples
    d: dimension of x, i.e. x in R^d
    phi: feature map R^d -> R^m
    m: dimension of feature space
    l   p^vn? r   r   rT   h㈵>Nr   r5   NNr   N)r8   r9   r:   normalstandard_normalonesscipysparse	lil_arrayr>   tocscr=   )rg   rY   drF   rG   phiw_truer/   yrQ   rj   idxiirk   bndss                  r   l1_regression_probr      s    ))

 4
5C
**QA*
'C  #F

1aq!f
%A#'SZZ4aZ88A 	!AAbqE<<!!1Q3!*-D
CAh a2hS"1"WS!B$YS&1QU8+SUBQBYSUAbD[q ::<D88AaC=DDAJDAJ>!yk!m+DdD$r   c                 D   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          y )Nc                    | j                  d      }| j                  d      }t        | j                  d      dv        t        | j                  d      t        d      v        t        t        | j                  d      t                     t        t        |t
                     t        t        |t                     | d   d<   | d	   d	<   | d
   d
<   | d   d<   y )Nr,   completephaser   r   r   r%   nitr/   r.   slackcon)popr   r>   
isinstanceintboolstr)r   r,   r   last_cbs      r   cbz!generic_callback_test.<locals>.cb   s    '')$77:& F*+!U1X-.
3775>3/0
8T*+
7C()3xUw<Ur   rx   r   r   r   ra   rs   r%   rj   rk   callbackmethod      2rv   r0   r1   r.   r/   r   r   )r8   rB   r	   r   r3   r   )selfr   rQ   rj   rk   r   r   s         @r   generic_callback_testr      s    G$ 	"bAFQFQF#DD
!$TBt{{
KCCUq!f=GENCJ/GCL#c(+GENCJ/GG$c'l3r   c                  :   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        y # 1 sw Y   y xY w)Nrx   r   r   r   r   r   ekki-ekki-ekkirj   rk   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrj   rk   options)r8   rB   assert_raises
ValueErrorr	   pytestwarnsr
   )rQ   rj   rk   r,   s       r    test_unknown_solvers_and_optionsr     s    
"bAFQFQF#DD*g$T2BD*g$T,@NG	oW	5 94$&67	99 9 9s   6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       y )Nrx   r   r   r   r   r   highsr   r   rv   r   )r8   rB   r	   r3   )rQ   rj   rk   r   s       r   test_choose_solverr     sQ    
"bAFQFQF#DD
!T4
0CCUq!f=r   c                  f   t        j                  t              5  t        dd       d d d        t        j                  t              5  t        dd       d d d        t        j                  t              5  t        dd       d d d        y # 1 sw Y   hxY w# 1 sw Y   ExY w# 1 sw Y   y xY w)Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr	   r}   r   r   test_deprecationr   (  s    	(	) ,*+,	(	) -+,-	(	) %)$% %	, ,- -% %s#   B	B8B'BB$'B0c            	         t        dd      } d}| j                  dk(  sJ | 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                  j                  |      sJ ddi}	t        ||||d|	      } d}| j                  dk(  sJ | j                  j                  |      sJ t        ddd      } d}| j                  dk(  sJ | j                  j                  |      sJ t        dd      } d}| j                  dk(  sJ | j                  j                  |      sJ ddlm}
  |
dd      \  }}d}|dk(  sJ |j                  |      sJ  |
d d       \  }}d}|dk(  sJ |j                  |      sJ y )Nr   r   r   z6Optimization terminated successfully. (HiGHS Status 7:r   rv   r   r   
time_limit皙?)rQ   rl   rm   rp   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   ra   highs-dsrQ   rl   rm   rp   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r5   )rp   r   z+The problem is infeasible. (HiGHS Status 8:r   r5   z+The problem is unbounded. (HiGHS Status 10:r!   )_highs_to_scipy_status_message:   zHello!z;The HiGHS status code was not recognized. (HiGHS Status 58:r%   z>HiGHS did not provide a status code. (HiGHS Status None: None))r	   r   r,   
startswithrR   lenscipy.optimize._linprog_highsr   )r   r2   rO   rP   rQ   rI   rH   rp   r   r   r   r   r,   s                r   test_highs_status_messager   1  s   
!G
$C
BC::??;;!!#&&&&q/Aq!WaXAF#A,KS!G
AAAfW!{<C
1C::??;;!!#&&&"oG
AAAfZ!#C
6C::??;;!!#&&&
!GG
4C
7C::??;;!!#&&&
"W
%C
7C::??;;!!#&&&L4RBOFG
GCQ;;c"""4T4@OFG
JCQ;;c"""r   c                  2    t        ddgddggdgddg       y )Nr   r5   r         rj   rk   r   )r	   r}   r   r   test_bug_17380r   ^  s     QF2q'$aVDr   c                   8   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 ZOePj                  j                  eSj                  dNk(  dOP      dQ        ZUyR)SLinprogCommonTestsa  
    Base class for `linprog` tests. Generally, each test will be performed
    once for every derived class of LinprogCommonTests, each of which will
    typically change self.options and/or self.method. Effectively, these tests
    are run for many combination of method (simplex, revised simplex, and
    interior point) and options (such as pivoting rule or sparse treatment).
    c                     t        |        y N)r   r   s    r   test_callbackz LinprogCommonTests.test_callbackz  s
    d#r   c                 v    t        dd      \  }}}t        |||| j                  ddi      }t        |d       y )Nrb   dispTrj   rk   r   r   fOr0   r_   r	   r   r3   r   rO   rP   rQ   r   s        r   	test_dispzLinprogCommonTests.test_disp}  s<    2r"1aaaa%tn.);<r   c                     ddg}ddgddgg}ddg}d}d}t        |||||f| j                  | j                  	      }t        |d
       y )Nr5   r%   rx   r   r   rv   r   rx   N)rj   rk   rp   r   r   r   )r	   r   r   r3   )r   rQ   rO   rP   	x0_bounds	x1_boundsr   s          r   test_docstring_examplez)LinprogCommonTests.test_docstring_example  s_    G!Wq!fF 		aaaI0F"ll4;;@-r   c           	      r    dg}dgg}d}t        t        t        |||| j                  | j                         y )Nr   hellorl   rm   r   r   )r   	TypeErrorr	   r   r   )r   rQ   rl   rm   s       r   test_type_errorz"LinprogCommonTests.test_type_error  s:     Cuid![[$,,	@r   c           
      b   t        j                  dg      }t        j                  dgg      }t        j                  dg      }|j                         }dt         j                  f}t	        |||t
        t        || j                  | j                        }t        |ddg       t        ||       y )N      ?      @      r   r   r|   r   )r8   rB   r?   re   r	   rl   rm   r   r   r3   r   )r   rQ   rj   	b_ub_origrk   rp   r   s          r   test_aliasing_b_ubz%LinprogCommonTests.test_aliasing_b_ub  s     HHcUOxx# HHcUO	~~atT4![[$,,@t<	4(r   c           
      b   t        j                  dg      }t        j                  dgg      }t        j                  dg      }|j                         }dt         j                  f}t	        |t
        t        |||| j                  | j                        }t        |ddg       t        ||       y )Nr   r   r   r   r!   r   )r8   rB   r?   re   r	   rj   rk   r   r   r3   r   )r   rQ   rl   	b_eq_origrm   rp   r   s          r   test_aliasing_b_eqz%LinprogCommonTests.test_aliasing_b_eq  s     HHcUOxx# HHcUO	~~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       y )Nr   r   g       @)            $@r   r   r   )r	   r   r   r3   r   rQ   rj   rk   rl   rm   rp   r   s           r   test_non_ndarray_argsz(LinprogCommonTests.test_non_ndarray_args  sb     EwuwuatT4![[$,,@qc:r   c                 8    t        j                  ddg      }ddgddgddgg}g d}	 	 d fd	} j                  D ci c]  }| j                  |    }}d|d	<   t        j                  t
              5   |||||
       d d d        y c c}w # 1 sw Y   y xY w)Nrx   r   r   r   r   r   c           
      @    t        | |||||j                  |       y Nr   r	   r   )rQ   rj   rk   rl   rm   rp   r   r   s          r   fz2LinprogCommonTests.test_unknown_options.<locals>.f  s     AtT4v;;9r   *   spamr   )NNNNNN)r8   rB   r   r   r   r
   )r   rQ   rj   rk   r   keyos   `      r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s    HHb"XAAA',0.2	9
 04||<S$,,s##<<&	\\/* 	2adq1	2 	2 =	2 	2s   B5BBc           	      8   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        t         j                  j                  j                  dd	g       t         j                  j                  |j                  d
       y # 1 sw Y   `xY w)Nr5   r   r!   r   r      r  r   rQ   rj   rk   rp   r   r   ?ffffff@ffffff)r8   rB   re   r   r   r   r
   r	   r   testingr   r/   r.   r   rj   rk   rQ   rp   r   r   s          r   test_integrality_without_highsz1LinprogCommonTests.test_integrality_without_highs  s     xx"a1a&1a&12xx$XXq!fbff+Q'cCFl\\/* 	GADtF!%+GC	G 	

""3553*5


""377D1	G 	Gs   DDc                     d fd	}t        t        |g dddg       t        j                         5  t        j                  ddt
               t        t        |g dg d       d d d        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y t        t        |d
dgt        j                  d      d
       y # 1 sw Y   xY w)Nc           
      T    t        | |||||j                  j                         y r   r	   r   r   rQ   rj   rk   rl   rm   rp   r   s         r   r   z1LinprogCommonTests.test_invalid_inputs.<locals>.f  $    AtT4v;;>r   r   r   r!   r   r!   r%   rp   ignorezCreating an ndarray from ragged)r   r  )r!   r%      r   r   r   r   )rj   rk   )rl   rm   _sparse_presolve)r   r   r!   )rj   rm   NNNNN)	r   r   warningscatch_warningsfilterwarningsr   r   r8   r=   )r   r   s   ` r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  sC   	>
 	j!Y7GH$$& 	X##;=VX*a;VW	X 	j!Y7HI 	j!aVAq6(!QHj!aVA3%qcBj!aVAq6(!QHj!aVA3%qcBj!aV1#A> $,,./0 	j!aV"((92EAN'	X 	Xs   3EEc           	          d fd	}t         j                  j                  d      }d}d}t        j                  j                  ||fd|      }|j                  |      }|j                  |      }||j                  |      z   }||j                  |      z
  }	t        j                  |	|f      }
||z  } j                  dv rNt        t        d j                   d	
      5  t        ||||
 j                   j                         d d d        y i  j                  } j                  dv rd|d<   t        ||||
 j                  |      }|j                  sJ y # 1 sw Y   y xY w)Nc           
      T    t        | |||||j                  j                         y r   r  r  s         r   r   z5LinprogCommonTests.test_sparse_constraints.<locals>.f  r  r   l   QxD;d      rd   )densityrG   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r  )r8   r9   r:   r   r   random_arrayr   column_stackr   r   r   r	   r   r   )r   r   rG   rY   rF   rl   x_validrQ   ro   rn   rp   rm   r   r   s   `             r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  sa   	> ii##$45||((!Q#(F%%a("szz!}$szz!}$"b*g~;;88z8DKK= IN 2N O B!$T&#{{DLLBB B '&G{{00$(!ADtF!%g?C;;;B Bs   "&EE%c                     g d}g dg dg dg}g d}d}t        |||| j                  d|i      }t        ||       t        |j                  |       y )	Nr%   rs   r!   r   r   r   r   r  r!   r5   r   r   r!         @rs   r   r5   r   rs   ra   r%   r   r   r5         iX  r!   r   r   )r	   r   r   r   r   )r   rQ   rO   rP   r   r   s         r   test_maxiterzLinprogCommonTests.test_maxiter   sY    ! " aaa('24'W5SWWg&r   c                    | j                   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       y y )NpresolveTr   )r   r   rp   r   r   r   r  ))r  r  )r5   r5   )r!   r!   r  )r  r5   r!   )r   r!   r   )r   r   r   r   r   r   r   r   r   rz   ))r  )r   ra   )      @r:  rl   rm   rp   r   r      )r   rz   r:  )r   getr	   r   r3   r   r   r   do_presolver   s      r   test_bounds_fixedz$LinprogCommonTests.test_bounds_fixed.  s#   
 ll&&z48qc&![[$,,@Q"!$i(B![[$,,@R,!$q!fff%5![[$,,@QA'!$iy)&<Aq6;![[$,,@ 	R-!$ r   c                    | j                   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       y y )	Nr5  Tr   r  r6  r   r  ))r  r   r   r  )r   r=  r	   r   r   r   r   r>  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleN  s    
 ll&&z48qc'$++t||T3!$qc7)DKKV3!$i(@![[$,,@3!$ r   c                      j                   j                  dd      }| xr  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        d d d        t        j                  t              5  t        j                  t              5   |||       d d d        d d d        y t        || j                   j                   	      }t        |       |rt        |j                  d
       t        || j                   j                   	      }t        |       |rt        |j                  d
       y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr5  Tr   r  r   r  c                 N    t        | |j                  j                        }|S )Nr6  r  )rQ   rp   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gv  s$    a%)[[$,,H
r   r  rQ   rp   r   r   r   )r   r=  r   r8   re   r   r   RuntimeWarningr   
IndexErrorr	   r   r   r   )r   r?  simplex_without_presolverQ   bounds_1bounds_2rE  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2e  s    ll&&z48'2?#Ot{{i7O RVVRVV,f5bffWrvvg.7#
 n- *]]:. *a)** n- *]]:. *a)** * Ah!%dllDCs#SWWa(Ah!%dllDCs#SWWa( * ** *
* ** *sH   F<8F0F<,GGG0F9	5F<<GG	GGc                 f    ddg}t        || j                  | j                        }t        |       y )Nr5   r   r   )r	   r   r   r"   )r   rQ   r   s      r   test_empty_constraint_1z*LinprogCommonTests.test_empty_constraint_1  s)    HaT\\B#r   c                    g d}dt         j                  ft         j                   dfddg}t        ||| j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y )N)r5   r   r5   r   r   r5   r   r6  r5  T)	r8   re   r	   r   r   r"   r=  r   r   r   rQ   rp   r   s       r   test_empty_constraint_2z*LinprogCommonTests.test_empty_constraint_2  sr    bff+|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       y )N)r   r5   r   r5   r   rP  r6  )r   r   r5   r   r   r1   r0   )r8   re   r	   r   r   r3   rQ  s       r   test_empty_constraint_3z*LinprogCommonTests.test_empty_constraint_3  sO    bff+|Wg>a![[$,,@}"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
       y )Nr!   r   r5   r   r   r   r   irv   r   	r8   rB   r	   rl   rm   rp   r   r   r3   r   rQ   rj   rk   r   s        r   test_inequality_constraintsz.LinprogCommonTests.test_inequality_constraints  sr     HHaVr!AAA 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       y )Nrv   r!   r   r5   r   r   )r   r5   r5   r   r  gUUUUUU?gUUUUUU?r   r	   rl   rm   rp   r   r   r3   rX  s        r   test_inequality_constraints2z/LinprogCommonTests.test_inequality_constraints2  sd     FARQ atT4![[$,,@uenEr   c           
      0   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       y )Nr   r   r   r   r1   )r	   rj   rk   rl   rm   r   r   r3   rQ  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       y )Nr   r   )r   Nr   r!   r   r8   rB   r	   rj   rk   r   r   r3   r   rQ   rl   rm   rp   r   s         r   test_bounded_below_only_1z,LinprogCommonTests.test_bounded_below_only_1  si    HHcUOxx# xxatT4![[$,,@qc:r   c           
      J   t        j                  d      }t        j                  d      }t        j                  g d      }dt         j                  f}t        |t        t        |||| j                  | j                        }t        ||t        j                  |             y )Nr!   r  rd   r   rT  r8   r   eyerB   re   r	   rj   rk   r   r   r3   sumrb  s         r   test_bounded_below_only_2z,LinprogCommonTests.test_bounded_below_only_2  so    GGAJvvayxx	"rvvatT4![[$,,@t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       y )Nr   r   )Nr   r   r!   r   ra  rb  s         r   test_bounded_above_only_1z,LinprogCommonTests.test_bounded_above_only_1  si    HHcUOxx# xxatT4![[$,,@qc:r   c           
      L   t        j                  d      }t        j                  d      }t        j                  g d      }t         j                   df}t        |t        t        |||| j                  | j                        }t        ||t        j                  |             y )Nr!   r  r%   r   rT  re  rb  s         r   test_bounded_above_only_2z,LinprogCommonTests.test_bounded_above_only_2  sq    GGAJvvayxx	"66'1atT4![[$,,@tFr   c           
      h   t        j                  d      }t        j                  d      }t        j                  g d      }t         j                   t         j                  f}t        |t        t        |||| j                  | j                        }t        ||t        j                  |             y )Nr!   r  r   rT  re  rb  s         r   test_bounds_infinityz'LinprogCommonTests.test_bounds_infinity  sv    GGAJvvayxx	"66'266"atT4![[$,,@t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       y )Nr5   r%   rx   r   r   r6   rv   r   gm۶m&g$I$Ig%I$I@r   )
r8   rB   float64re   r	   rl   rm   r   r   r3   )r   rQ   rj   rk   r   r   rp   r   s           r   test_bounds_mixedz$LinprogCommonTests.test_bounds_mixed  s     HHb!W"xx"aQ!(*

41vffWbff%	L	Y'atT4![[$,,@VV<L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        |       y Nr|   r   rz   r   r   r   )   r   r!   r   r   r   r   )r	   rl   rm   r   r   r   r   rQ   rj   rk   rp   r   s         r    test_bounds_equal_but_infeasiblez3LinprogCommonTests.test_bounds_equal_but_infeasible  s^    GB!Q!R))$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        |       y rs  )r	   rj   rk   r   r   r   rb  s         r   !test_bounds_equal_but_infeasible2z4LinprogCommonTests.test_bounds_equal_but_infeasible2  s^    GB!Q!R))$atT4![[$,,@3r   c           
          ddg}ddgddgg}ddg}ddg}| j                   D ci c]  }|| j                   |    }}d	|d
<   t        |||t        t        || j                  |      }t        |       y c c}w )Nr   r   g?g@r%   rs   r   ru  Fr5  r   )r   r	   rl   rm   r   r   )r   rQ   rj   rk   rp   r  r  r   s           r   test_bounds_equal_no_presolvez0LinprogCommonTests.test_bounds_equal_no_presolve  s    
 FAc
#1v&!/3||<S$,,s##<<*atT4![[!53 =s   A2c           
      P   d\  }}t         j                  j                  d      }|j                  |      }d|d<   |j                  ||f      }d|d d df<   |j                  |      }g dg}d}g d}	t        ||||||	| j                  | j
                        }
t        |
d	
       y )Nr  l   ujo0o r   r   )r   r   r   r   r!   )ry   ra   r}  )ry   Nr   r   g["r   )r8   r9   r:   r	   r   r   r3   )r   rY   rF   rG   rQ   rl   rm   rj   rk   rp   r   s              r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1'  s    1ii##O4JJqM!zz1a&!QT
zz!}~BatT4![[$,,@);<r   c           
      \   | j                   dv rt        j                          t        j                  j                  d      }d\  }}|j	                  |      }d|d<   |j	                  ||f      }d|d d df<   |j	                  |      }|j	                  ||f      }d|d d df<   |j	                  |      }d}	t        ||||||	| j                   | j                        }
t        |
       | j                  j                  d	d
      r&d| j                   vrt        |
j                  d       y y y )N>   r   	highs-ipml   T-	r r$   r5   r   r   r   r   r5  Tr   )r   r   xfailr8   r9   r:   r	   r   r"   r=  r   r   )r   rG   rY   rF   rQ   rl   rm   rj   rk   rp   r   s              r   test_zero_column_2z%LinprogCommonTests.test_zero_column_26  s   ;;33LLNii##$781JJqM!zz1a&!QT
zz!}zz1a&!QT
zz!}atT4![[$,,@#<<J-'2L !$	 3M-r   c           
          g d}g dg dg dg}g d}t        |t        t        ||t        | j                  | j
                        }t        |d       y )Nr  r   r   r   r   r   r   r   r!   r   r   r!   r   r	   rj   rk   rp   r   r   r3   r   rQ   rl   rm   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1Q  sF    9i0atT4![[$,,@+r   c           
          g dg dg dg}g d}g d}t        |||t        t        t        | j                  | j
                        }t        |d       y )Nr  r  r  r  r   r   r   r[  r   rj   rk   rQ   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2Y  sF    9i0atT4![[$,,@+r   c           
         d\  }}t         j                  j                  d      }|j                  |      }|j                  ||f      }d|dd d f<   |j                  |      }t        |t        t
        ||t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y )Nr$   l   <l(Sr   r   r5  T)r8   r9   r:   r	   rj   rk   rp   r   r   r   r=  r   r   r   rY   rF   rG   rQ   rl   rm   r   s           r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3a  s    1ii##$56JJqMzz1a&!QT
zz!}atT4![[$,,@3 <<J-!$ .r   c           
         d\  }}t         j                  j                  d      }|j                  |      }|j                  ||f      }d|dd d f<   |j                  |       }t        |||t        t
        t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y )Nr$   l   F- r   r   r5  T)r8   r9   r:   r	   rl   rm   rp   r   r   r   r=  r   r   )r   rY   rF   rG   rQ   rj   rk   r   s           r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4p  s    1ii##$45JJqMzz1a&!QT


1~atT4![[$,,@3 <<J-!$ .r   c           
         g d}g dg dg dg dg}g d}t        |t        t        ||t        | j                  | j
                        }t        |       | j
                  j                  dd      rt        |j                  d	       y y )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r%   r   r5  Tr   )
r	   rj   rk   rp   r   r   r   r=  r   r   r  s        r   test_singleton_row_eq_1z*LinprogCommonTests.test_singleton_row_eq_1  so    lL,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       y )	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  sH    lL,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                  j                  d	d
      rt        |j                  d       y y )Nr  r  r  r5   r   r   r   r  )r   r   r   r%   r   r   r   r   r   r5  Tr   	r	   rl   rm   r   r   r   r=  r   r   rv  s         r   test_singleton_row_ub_1z*LinprogCommonTests.test_singleton_row_ub_1  st    lM<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	
       y )Nr  r  r  r  r  )r   r         r%   r  r   rd   r   )r	   rl   rm   r   r   r3   rv  s         r   test_singleton_row_ub_2z*LinprogCommonTests.test_singleton_row_ub_2  sM    lM<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        |       y )Nr5   r   r   )r   r   r9  r   )r	   rl   rm   rp   r   r   r   rX  s        r   test_infeasiblez"LinprogCommonTests.test_infeasible  sZ    HAAR atT4![[$,,@3r   c           
          dg}dgg}d}d}t        |||t        t        || j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y )	Nr   r   r%   )r  rv   r   r5  Tr   r  rv  s         r   !test_infeasible_inequality_boundsz4LinprogCommonTests.test_infeasible_inequality_bounds  sq    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        |       y )Nr   r5   r   r   )	r8   rB   r	   rl   rm   rp   r   r   r"   rX  s        r   test_unboundedz!LinprogCommonTests.test_unbounded  sc    HHaVr!QRBxatT4![[$,,@#r   c                    dg}dg}| j                   D ci c]  }|| j                   |    }}d|d<   t        ||| j                  |      }| j                  dk(  rt        |j                  d       y t        |       y c c}w )Nr   Nr   Fr5  rF  r   r  )r   r	   r   r   r   r"   )r   rQ   rp   r  r  r   s         r   *test_unbounded_below_no_presolve_correctedz=LinprogCommonTests.test_unbounded_below_no_presolve_corrected  s    C/3||<S$,,s##<<*&![[! ;;++Q'c" =s   A>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
                  j                         j                  d      sAt        |j                  d	   t         j                         t        |j                  d
d d       y
y
)|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        )r   r   r   r   r5   r5   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r5   r   r   r   )r   r   r   rP  rP  r   r   r   r5   N$   $The problem is (trivially) unboundedr8   rB   r	   rl   rm   r   r   r"   lowerr   r   r/   re   r,   rv  s         r   *test_unbounded_no_nontrivial_constraints_1z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1  s    
 HH)*xx++,. / xx
#/atT4![[$,,@#{{  "--g6rBFF+Sb)?A 7r   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
                  j                         j                  d      sBt        |j                  d	   t         j                          t        |j                  d
d d       y
y
)r  )r   r   r   r   r5   r   r  r  )r   r   r   r   r   r   r  )r   r   r   rP  rP  )Nr   r   r   r5   Nr  r  r  rv  s         r   *test_unbounded_no_nontrivial_constraints_2z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2  s    
 HH()xx+++- . xx
#/atT4![[$,,@#{{  "--g6rRVVG,Sb)?A 7r   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
       y )N)r#  ra   r   r5   r7  )rb   r   r   )   rb   r   )r   r#  '  r   )r   r   r  gh㈵>Hz>)r1   r+   r*   rW  rX  s        r   test_cyclic_recoveryz'LinprogCommonTests.test_cyclic_recovery  s`     HH\"R' atT4![[$,,@}4dKr   c           
         t        j                  g d      }t        j                  g dg dg dg      }g d}d}| j                  j                         D ci c]  \  }}||
 }}}||d<   t	        |||t
        t        t        | j                  |      }| j                  d	k(  r+| j                  j                  d
      st        ||d          y t        |g d       y c c}}w )N)ry   9   rw   g      8@)rd   g      r   rw   )rd   g      r  r   r  )r   r   r   r#  r   r   r   bland)r   r   r   r   r^  )r8   rB   r   itemsr	   rl   rm   rp   r   r=  r   r3   )	r   rQ   rj   rk   r   r  valr  r   s	            r   test_cyclic_blandz$LinprogCommonTests.test_cyclic_bland  s    HH&'xx--%' (  &*ll&8&8&:;(#sS#X;;)atT4![[!5 ;;)#DLL,<,<W,E+C9> C<8 <s   C!c                    d\  }}t         j                  j                  d      }|j                  |      }|j                  ||f      }|j                  |      }d|dd d f   z  |dd d f<   |dxx   dz  cc<   t        j                         5  t        j
                  ddt               t        |t        t        ||t        | j                  | j                        }d d d        t               y # 1 sw Y   xY w)	N)ra   ra   l   $*P r   r   r5   r  A_eq does not appear...r   )r8   r9   r:   r  r  r  r
   r	   rj   rk   rp   r   r   r   r  s           r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility(  s     1ii##O4JJqMzz1a&!zz!}$r1u+oRURB$$& 	D##3_F!T4tV!%dllDC	D
 	3	D 	Ds   AC11C:c           
          t               \  }}}}}}}t        |||||t        | j                  | j                        }t        |||       y )Nr   r   )r   r	   rp   r   r   r3   	r   rQ   rj   rk   rl   rm   r~   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem=  sL     5G4H14tT66atT4![[$,,@6Br   c                    t        dd      \  }}}t        j                         5  t        j                  ddt               t        j                  ddt
               t        j                  dt               t        |||t        t        t        | j                  | j                        }d d d        t        d       y # 1 sw Y   xY w)Nrb   r  $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )r_   r  r  r  r
   rG  simplefilterr   r	   rl   rm   rp   r   r   r3   r  s        r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problemE  s     !R(dA$$& 	D##@/S##5~G!!(M:!T4tV!%dllDC	D 	);<	D 	Ds   BB??Cc                    g d}d\  }}|||d|dddd|ddg|dd|d|ddddddgdd||ddddddddgdddddd||dd|dgdddd|||d|dddgddddddd||dd|gddddddddd|||gg}g d}t        j                         5  t        j                  dt               t	        |t
        t        ||t        | j                  | j                        }d d d        t        ddd	
       y # 1 sw Y   xY w)N)r   r%   rw      r%   r!   rs   rz   r   r<        rP  r   )r      i!   r   r   ir  r   i  ư>r  )r0   r+   r*   )r  r  r  r   r	   rj   rk   rp   r   r   r3   )r   rQ   rF   prl   rm   r   s          r   test_network_flowz$LinprogCommonTests.test_network_flowU  sM    5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!!(M:!T4tV!%dllDC	D 	4dC		D 	Ds   ?AC%%C.c                 T   g d}ddgddgddgddgddgg}d\  }}||dddg|d||dgd||d|gddd||gg}g d}t        j                         5  t        rt        j                  d	t               t        j
                  d	d
t               t        j
                  d	dt               t        j
                  d	dt               t        j                  d	t               t        |t        t        |||| j                  | j                        }d d d        t        d       y # 1 sw Y   xY w)N)r   r   r   r!   r   r   r%   r   r!   r  rP  )r|   r   r   r%   r  scipy.linalg.solve
Ill...r  Solving system with option...r   rt  r   )r  r  has_umfpackr  r   r  rG  r
   r   r	   rj   rk   r   r   r3   )r   rQ   rp   rF   r  rl   rm   r   s           r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityj  s=    FFFFF 11aO1aO1aO1aO	
 $$& 	D%%h?##6H##3_F##9?L!!(M:!T4tV!%dllDC	D 	,	D 	Ds   B;DD'c           
          g d}g dg dg}ddg}t        |||t        t        t        | j                  | j
                        }t        |d       y )	N)r   rx   r|   )r!   r   r   )r   r  r!   ra   r<  r   ir   r[  rX  s        r   (test_simplex_algorithm_wikipedia_examplez;LinprogCommonTests.test_simplex_algorithm_wikipedia_example  sM     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
       y )Nr+  r,  r-  r/  r0  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r0   r1   r+   r*   r  r  s        r   test_enzo_examplez$LinprogCommonTests.test_enzo_example  sX     ! " atT4![[$,,@"@!	.r   c                 D   g d}g dg dg dg dg dg}g d}t        j                         5  t        j                  dd	t               t	        |t
        t        ||t        | j                  | j                  
      }d d d        t        dg d       y # 1 sw Y   xY w)N)r  g333333@g%@r  g333333g%)r5   r5   r5   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r  皙?333333?r  r  r  r  r   gRQ)r  g?        r  r   r  r   )r  r  r  r
   r	   rj   rk   rp   r   r   r3   r  s        r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  s    /%""""	$
 *$$& 	D##3_F!T4tV!%dllDC	D
 	"@	B	D 	Ds   A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                  |             y )Nrb   r   r   r   r   r   )r8   r   pir;   rC   cossinr	   rj   rk   rp   r   r   r3   r=   )r   rY   rQ   tmprl   rm   r   s          r   #test_enzo_example_c_with_degeneracyz6LinprogCommonTests.test_enzo_example_c_with_degeneracy  s    WWQZK"%%i"))Aq1u--Q7yy"&&+/266#;781vatT4![[$,,@bhhqk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        |       y )Nrc   r   r   r  r   r   )r8   r   r  r;   r  r  rC   r	   rj   rk   rp   r   r   r"   )	r   rY   rQ   r  row0row1rl   rm   r   s	            r   &test_enzo_example_c_with_unboundednessz9LinprogCommonTests.test_enzo_example_c_with_unboundedness  s    WWQZK"%%i"))A,&!a%0 vvc{QQvvc{Qyy$&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}| j                  D ci c]  }|| j                  |    }}d|d<   t        |t        t        ||t        | j                  |      }t        |       y c c}w )Nrc   r   r   Fr5  r   )r8   r   r  r;   rC   r  r  r   r	   rj   rk   rp   r   r   )	r   rY   rQ   r  rl   rm   r  r  r   s	            r   &test_enzo_example_c_with_infeasibilityz9LinprogCommonTests.test_enzo_example_c_with_infeasibility  s    WWQZK"%%i"))A,&!a%0yy"&&+/266#;781v/3||<S$,,s##<<*atT4![[!53 =s   C-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       y )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   r5   r   r5   r   )r   r   r5   r   r5   r   r   r   g>)r0   r1   r+   )r8   rB   r	   rp   r   r   r3   
zeros_liker   rQ   rj   rk   rl   rm   r   s          r   test_basic_artificial_varsz-LinprogCommonTests.test_basic_artificial_vars  s    
 HH>?xx-/D.0D/1 2 xx23xx/1HIJxxAatT4![[$,,@bmmA6F!	#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 ]Y  }||j                         v st        ||   d   t         j"                        sJ t        ||   d	   t         j"                        rYJ  y )
Nr   rj   rk   rl   rm   rp   r   r   r   z%Optimization terminated successfully.gdy=r+   )eqlinineqlinr  upper	marginalsresidual)rq   r	   r   r   r   r   r   r   r,   r   r/   r.   r   r   keysr   r8   ndarray)	r   rQ   rj   rk   rl   rm   rp   r   r  s	            r   test_optimize_resultz'LinprogCommonTests.test_optimize_result  s*   ,;A,>)4tT6adDt#DKKOCJJ$++%CKK#JJKCEE	377+tcee|+SWW5Atcee|+SYYUC9 	DCchhj !#c(;"7DDD!#c(:"6

CCC	Dr   c           /         g d}d}d}d}t        j                  g dddd|dd	dd
ddd
dd
ddddddgddd|ddd	d
d
dd
d
dddddddgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddd
d
dddd
||ddd|dddddgdddddd
d
dddd
||d|ddddgdd
dd ddd|d
d
ddddd|dddgddddd
dd
ddd|d
|ddd|ddgdd
d
d ddd||d
ddddddd|dgddddd
d
dddd||d
ddddd|gg      }t        j                  g d!      }t        j                  g d"      }t        j                         5  t        j                  d#d$t
               t        j                  d#d%t               t        j                  d#t               t        |||t        t        || j                  | j                  &      }d d d        t        d'(       y # 1 sw Y   xY w))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   rx   r   r   r   r5   r5   r   r5   r5   r   r   r   r   r   r   r   r   g333333rx   r5   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   gףp=
?r   gffffff?g @)r  r   r   r#  r#  r#  r#  r#  r#  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   g^Zr   )r8   rB   r  r  r  r
   rG  r  r   r	   rl   rm   r   r   r3   )	r   rp   r   rE  hrj   rk   rQ   r   s	            r   test_bug_5400z LinprogCommonTests.test_bug_5400  sw   N xxN4Ar1b!QAr1aAq!L1aAr2r1b"aAq!QJEEEEEEEEEEEEFFFFFFb"a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: xx 5 6 HH 4 5$$& 	D##@/S##5~G!!(M:!T4tV!%dllDC	D 	)<=	D 	Ds   ;B GGc           
         t        j                  g d      }t        j                  g dg dg      }t        j                  ddg      }t        j                  g dg       }t        j                  dg       }d}t        ||||||| j                  | j                  	      }t        |d
t        j                  g d             y )Nr  )r   r  r  )     @r  r  g      @r  )r  g    .Ag    .Ag    cAr   r   gfffff-@)r  g@r  r   r8   rB   r	   r   r   r3   )r   rQ   rl   rm   rj   rk   rp   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139H  s     HHYxx'<=>xx9:2344)%%atT4![[$,,@ 	"$((<"8	:r   c                    t        j                  g dg      }t        j                  dg      }t        j                  g dg dg dg dg dg      }t        j                  g d      }t        j                  g d	g d
g      j                  }t        j                  g d      }t        j                         5  t
        rt        j                  dt               t        j                  ddt               t        j                  ddt               t        j                  ddt               t        j                  dt               t        ||||||| j                  | j                        }d d d        d}t        j                  g d      }	t        ||	       d}
t!        |d d df   |
z
  |j"                         t!        |j"                  |d d df   |
z          y # 1 sw Y   sxY w)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  rd   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r
  g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?r  z%Solving system with option 'cholesky'r  r  r   gV)
r  r  r  r  r  rd   r  r  r  r  r   r  r   r   )r8   rB   rf   r  r  r  r  r   r  r
   rG  r   r	   r   r   r3   r   r/   )r   rl   rm   rj   rk   rp   rQ   r   r0   r1   r+   s              r   test_bug_6690z LinprogCommonTests.test_bug_6690^  s   
 xx@ABxx!xx4*-9.
  xx9:MH
  1 	 HH   $$& 	D%%h?##A?T##@/S##5~G!!(M:!T4tV!%dllDC	D %HH G H		J &A,-suu5#%%1!45+	D 	Ds   :B3GG(c                 f   t        d      \  }}}}}t        j                         5  t        j                  ddt               t        j                  ddt
               t        j                  dt               t        |t        t        ||t        | j                  | j                        }d d d        d}t        |       t        |j!                  |j"                        |       t%        t'        j(                  |j"                  j*                        dz
  |j"                         y # 1 sw Y   ~xY w)	Nr!   r  r  r  r   `4?r   r   )rR   r  r  r  r
   rG  r  r   r	   rj   rk   rp   r   r   r3   r   dotr/   r   r8   r=   rU   )r   rl   rm   rQ   _r   r0   s          r   test_bug_7044z LinprogCommonTests.test_bug_7044  s    
 +1odAq!$$& 	D##3_F##5~G!!(M:!T4tV!%dllDC	D )5."((355::.5suu=	D 	Ds   BD''D0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        y )!N)	r5   r   r   r   r   r   r   r   r   )	r   g     g     x@g     8g     Xg      g     }@g      Tg     Pr)	r   g     @g      E@g     H@g      m@g     @g     x@g     hg     L@)	r   g      jg     g     ؀@g     t@g     @g     g     p@g     K@)	r   g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@)	r   g     s@     zg     n@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   rw   r   ghb$[@r  r0   r+   r	  r   s           r   test_bug_7237z LinprogCommonTests.test_bug_7237  s    
 HH12xxE?BBEA8888888800000000- 0 xx 8 9 xx=>?xx"!#atT4![[$,,@$?r   c                    t        j                  g dg dg dg dg      }t        j                  |j                  d         }t        j                  |j                  d          }dg|j                  d   z  }t        j                         5  t        j                  dd	t               t        j                  dt               t        |||t        t        || j                  | j                  
      }d d d        | j                  j!                  dd      dk  r| j                  dk(  rt#               y t%        dd       y # 1 sw Y   RxY w)N)X  i  iD4       3i)ii    @i  )r$  r   r   r#  r   )r"  r   r   r%  r   r   r   r   r  r  r   tolg&.>绽|=r   g r  r  )r8   rB   r=   rE   r   r  r  r  rG  r  r   r	   rl   rm   r   r   r=  r&   r3   )r   rj   rk   rQ   rp   r   s         r   test_bug_8174z LinprogCommonTests.test_bug_8174  s    xx00%%	' (
 xx

1&WWTZZ]##DJJqM)$$& 	D##5~G!!(M:!T4tV!%dllDC		D <<E4(50T[[I5M5c:C-@tL	D 	Ds   A%EEc                 b   t        j                  g d      }t        j                  d       }t        j                  dgdgdgdgdgdgdgg      }t        j                  g dg dg dg dg dg      }t        j                  d	gd
gd
gd
gd
gg      }t        j                         5  t
        rt        j                  dt               t        j                  ddt               t        |||||t        | j                  | j                        }d d d        t        d       y # 1 sw Y   xY w)N)r   r   r   r   r   r   r   rz   r   )r   r   r   r   r   r   r   )r  g?g?r   r   r   r5   )r  r   r   r   r   r   gUUUUUU)r   r  r   r   r   r   )r   r   r  r   r   r   r*  r#  r   r  r  r   g?E@r   )r8   rB   identityr  r  r  r  r   r  r
   r	   rp   r   r   r3   r  s          r   test_bug_8174_2z"LinprogCommonTests.test_bug_8174_2  s    HH*+Axx"tbTB4"tbTBCxx!(&('
  xx#aS1#s34$$& 	D%%h?##3_F!T4tV!%dllDC	D 	)9:	D 	Ds   (A'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	
       y )N)rz   r   r|         ?r.  )r%         @r.  r         )r   r   r   r.  rd   )r!   r  r%   g      )ru   )r5   g      @r   r0  r   )r/  r   g      r5   g      #@)r   r   r   r   r   )rj   rk   r   r   )r   r   r  gUUUUUU@gUUUUUU#@r^  )r8   rB   r	   r   r   r3   rX  s        r   test_bug_8561z LinprogCommonTests.test_bug_8561  sm    
 HH)*xx$##"#% & xx(adt||![[*'=>r   c                 ~   g d}g dg dg dg dg}g d}g d}d}t        j                         5  t        rt        j                  d	t               t        j
                  d	d
t               t        j                  d	t               t        |||t        t        || j                  | j                        }d d d        |j                  g d       |j                  d       d|d<   t        j                         5  t        rt        j                  d	t               t        j
                  d	d
t               t        j                  d	t               t        |||t        t        || j                  | j                        }d d d        d}t        ||       t        ||       y # 1 sw Y   xY w# 1 sw Y   4xY w)N)ry   ra   rv   r!   )rs   r{   r|   rv   )r{   rs   r%   rt   )r|   r%   rs   r|   )r!   rx   rx   ry   )rw   r3  r|   )r   r   r   r   g      B@r  r  r   )r   r   r5   r   r   r   r   r   )r0   r*   )r  r  r  r  r   r  rG  r   r	   rl   rm   r   r   r@   r3   )	r   rQ   rj   rk   rp   r0   res1res2r*   s	            r   test_bug_8662z LinprogCommonTests.test_bug_8662  st     " =#$$& 	E%%h?##5~G!!(M:1dD$f"&++t||ED	E 	M"A q	$$& 	E%%h?##5~G!!(M:1dD$f"&++t||ED	E +DA+DA1	E 	E	E 	Es   BF';BF3'F03F<c           
          ddg}ddgg}dg}ddg}t        |t        t        |||| j                  | j                        }t        |dd	gd
       y )Nr   r  r   ru   rt   r   r   r   g۶m۶m?gI$I$@rT  )r	   rj   rk   r   r   r3   rb  s         r   test_bug_8663z LinprogCommonTests.test_bug_86631  s]     FByt\*atT4![[$,,@4yfEr   c                 ^   dg}dgdgg}ddg}dgdgdgg}g d}t        j                         5  t        j                  dt               t        j                  dd	t
               t        |||||t        | j                  | j                  
      }d d d        t               y # 1 sw Y   xY w)Nr%   r   r  r   r{   rw   r!   r   ra   r  r  r   )r  r  r  rG  r  r
   r	   rp   r   r   r   r  s          r   test_bug_8664z LinprogCommonTests.test_bug_8664<  s     CaSz1vbTA3$$& 	D!!(N;##9?L!T4tV!%dllDC		D 	3	D 	Ds   A!B##B,c           
      \   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                         y	)
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r5   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rP  rP  r   r   N)r8   rB   r	   rl   rm   r   r   r3   r   r/   r.   rv  s         r   test_bug_8973z LinprogCommonTests.test_bug_8973M  s     HH%&xx/:;xxB 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       y)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   rT  N)	r8   r=   rB   r	   rl   rm   r   r   r3   rv  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2^  sh     HHQKxx!xx~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                  | j                         t        |||t        t        || j                  |      }t        |ddgd       y)zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   r   r5   r%   rx   r   rv   r   r   Tr   ra   r   rT  N)
r8   r=   rB   updater   r	   rl   rm   r   r3   )r   rQ   rj   rk   rp   r  r   s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124n  s    
 HHQKxx!xx~GQ!Q 1v
+TN	atT4![[!5BxSAr   c                    t        j                  g dg dg dg dg dg dg      }t        j                  g d      }t        j                  dd	t        j                  d
      fd      }t	        j
                         5  t	        j                  ddt               t        |t        t        ||t        | j                  | j                        }ddd       t        g dd       y# 1 sw Y   xY w)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   )      ra         f   r   r   r%   Naxisr  r  r   )   \   r  rG  r   ra   rL  rT  )r8   rB   concatenater=   r  r  r  r
   r	   rj   rk   rp   r   r   r3   )r   rl   rm   rQ   r   s        r   test_bug_10349z!LinprogCommonTests.test_bug_10349  s    
 xx++++++- . xx56NNAq"((1+.T:$$& 	D##3_F!T4tV!%dllDC	D
 	'@bQ	D 	Ds    AC((C1darwinz0Failing on some local macOS builds, see gh-13846reasonc                 V   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                   j                  d      sddi}|j                  | j                         t	        j
                         5  t	        j                  ddt               t        rt	        j                  dt               t	        j                  ddt               t	        j                  ddt               t	        j                  ddt               t	        j                  ddt               t	        j                  ddt               t	        j                  ddt               t        |t        t        ||t         | j                   |      }ddd       t#        j$                  d       y# 1 sw Y    xY w)zA
        Test that autoscale fixes poorly-scaled problem
        )       r  rS  r  rS  r  r  r  r  r  r  r  r  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  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   ArT  rT  rT  rT  rT  r   	autoscaleTr  r  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...An ill-conditioned...r   Nl )r   r   rA  r   r  r  r  r
   r  r  r   rG  r   r	   rj   rk   rp   r   r.   )r   rQ   rl   rm   r  r   s         r   test_bug_10466z!LinprogCommonTests.test_bug_10466  sp    NDDDEDDDDDD	F 
 {{%%g.d#A	$$& 	9##9?L%%h?##6H##9>K##3^E##8.J##5}F##1=B !T4tV!%a9C%	9( 	-)	9 	9s   9DFF(N)V__name__
__module____qualname____doc__r   r   r   r   r   r   r   r  r  r   r)  r3  r@  rB  rL  rN  rR  rU  rY  r\  r_  rc  rh  rj  rl  rn  rq  rw  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   r(  r,  r1  r6  r8  r;  r=  r?  rB  rN  r   markskipifsysplatformrX  r}   r   r   r   r   m  s   $=	.@));2 2$O:B'%@%.')R
%F
@F
/;G;GGN   "=%6,,%%
%,%.	 %# A(A(
L92 *C= D* -D	..(B$	C" #"D.6>p:,,6\>('@RM0;2?"$BL	F ")"< B&R( [[0!/  1/.1/.r   r   zignore::DeprecationWarningc                       e Zd ZdZy)LinprogSimplexTestsr   NrY  rZ  r[  r   r}   r   r   rb  rb    s    Fr   rb  c                       e Zd ZdZd Zy)LinprogIPTestsr   c                 .    t        j                  d       y )Nz*Test is failing, but solver is deprecated.r   skipr   s    r   rX  zLinprogIPTests.test_bug_10466  s    @Ar   N)rY  rZ  r[  r   rX  r}   r   r   re  re    s    FBr   re  c                   "    e Zd ZdZd Zd Zd Zy)LinprogRSTestsr   c                 .    t        j                  d       y Nz Intermittent failure acceptable.rg  r   s    r   r  zLinprogRSTests.test_bug_5400      67r   c                 .    t        j                  d       y rl  rg  r   s    r   r6  zLinprogRSTests.test_bug_8662  rm  r   c                 .    t        j                  d       y rl  rg  r   s    r   r  z LinprogRSTests.test_network_flow  rm  r   N)rY  rZ  r[  r   r  r6  r  r}   r   r   rj  rj    s    F$888r   rj  c                      e Zd Zd Zej
                  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
                  j                  d      d        Z
d Zd Zej
                  j                  d      d        Zy)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       y )Nc                      y r   r}   r   s    r   r   z+LinprogHiGHSTests.test_callback.<locals>.cb  s    r   rx   r   r   r   r   r   r   r   r   rv   r   )r8   rB   r   NotImplementedErrorr	   r   r3   )r   r   rQ   rj   rk   r   s         r   r   zLinprogHiGHSTests.test_callback  sv    	HHb"XAAA')7ADt!$++	7addkkB1a&Ar   r   r   r5   r   r5  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                       fd}|j                   j                         t        j                  t              5   ||       d d d        y # 1 sw Y   y xY w)Nc                 6    t        dj                  |        y )Nr   r   r   )r   r   s    r   r   z7LinprogHiGHSTests.test_invalid_option_values.<locals>.f  s    Adkk7;r   r   )rA  r   r   r   r
   )r   r   r   s   `  r   test_invalid_option_valuesz,LinprogHiGHSTests.test_invalid_option_values  sA    	<t||$\\/* 	g	 	 	s   
AAc                     t        dt        j                  j                  d            \  }}}}}d}t	        ||||| j
                  | j                        }t        |j                  dk(  | j
                  dk7         y )Nr%   i(! rG   r   r;  r   r  )	rR   r8   r9   r:   r	   r   r   r   crossover_nit)r   rl   rm   rQ   r  rp   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover  sm    *1"))2G2G2PQdAq!ad#DKKO 	S&&!+T[[K-GHr   ra   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        t        |j                  j                         
 fd}t        j                  d	
      5  t        |d|j                        }	d|	t        j                         <   d d d        t        |j                  j                  	       y # 1 sw Y   xY w# 1 sw Y   6xY w)Nr   rg   r  c           	      P    t        | j                        j                  S Nr   r	   r   r.   )r/   rl   rj   rm   rp   rQ   r   s    r   f_bubz/LinprogHiGHSTests.test_marginals.<locals>.f_bub*  s(    1dAtT6"&++//2s3r   z3-point)r   f0c           	      P    t        | j                        j                  S r  r  )r/   rl   rj   rk   rp   rQ   r   s    r   f_beqz/LinprogHiGHSTests.test_marginals.<locals>.f_beq2  s(    1dD$6"&++//2s3r   c           	          t        j                  | g      j                  }t        |j                        j
                  S r  r8   rB   rf   r	   r   r.   )	r/   rp   rl   rj   rm   rk   rQ   r   ro   s	     r   f_lbz.LinprogHiGHSTests.test_marginals.<locals>.f_lb:  s@    XXq"g&((F1dD$f"&++//2s3r   r  )invalidc           	          t        j                  | g      j                  }t        |j                        j
                  S r  r  )	r/   rp   rl   rj   rm   rk   rQ   rn   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ubG  s@    XXr1g&((F1dD$f"&++//2s3r   )rq   r	   r   r   rf   r   r.   r   r  r  r  r8   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrl   rj   rm   rk   rp   rQ   rn   ro   s   `         @@@@@@@@r   test_marginalsz LinprogHiGHSTests.test_marginals   s    -<,C)4tT6adDt#DKKOB	3 	3 #5$ySWWM--v6	3 	3 #5$ySWWM		++V4	3 	3
 [[* 	(%dBySWWME&'E2;;r?"#	(
 			++U3	3 	3
 [[* 	(%dBySWWME&'E2;;r?"#	( 			++U3#	( 	(	( 	(s   :3G63GGG'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       y )Nr  r  r  r   -q=r  )rq   r	   r   r   rf   r  r  r  r  r  r   )	r   rQ   rj   rk   rl   rm   rp   r   resids	            r   test_dual_feasibilityz'LinprogHiGHSTests.test_dual_feasibilityR  s    ,;,D)4tT6adDt#DKKO
 dffs{{4444#))---.$$% $$% 	qu-r   c           
          t        d      \  }}}}}}t        ||||||| j                  | j                        }t	        j
                  |j                  j                  |||j                  z  z
  z  d      sJ y )Nr  r  r  r   )	rq   r	   r   r   r8   allcloser  r  r/   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slackness`  so    ,;,D)4tT6adDt#DKKO {{3;;00D4#%%<4GH!LLLr   z&Upstream / Wrapper issue, see gh-20589rP  c                 <   g d}g d}g d}g d}g d}g d}t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }	t        j
                  j                  |||	ffd	      }
t        j                  |t         j                        }t        j                  |t         j                        }t        j                  j                  |d
d
|
||      }|j                  dk(  sJ |j                  }t         j                  j                  |
|z  |z
        }t         j                  j                  |j                  j                        }t        ||       y
)zH
        Test that `linprog` now solves a poorly-scaled problem
        )!)     @g    j/aA)r  Nr  N)r  gS8(U@r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   MbP?MbP<:=r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   )Sr   r   r   r   r   r   r!   r!   r%   r%   r  r  rv   rv   rz   rz   rs   rs   rw   rw   ra   r  r  r  r  r  r     r  rt  rt  rt  rt  r<  r<  r  r  r  r     r  r  r  r  r  r  r  rb   rb   rb   rb      r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )Sr<  rt  r  r  r  r  r  rb   r  r  r  r  r  r  r  r  r  r  r  r   r       r!   rt  r  r%   r   r%   r   r  r  r   r  r   r  r  r<  r  r%   r  r%   r  r  rv   r  rv   r  rb   r  rz   rv   rz   rv   r  r  rs   rz   rs   rz   r  r  rw   rs   rw   rs   r  r  ra   rw   ra   rw   r  r  r  ra   r  ra   r  r  r  r  r  r  ) r  r  r  r  r  r  r  r  r  r  g    *aAr  gelaz?g?2gZPd%q?g4g̚y?gC1|g֛x?gKcgE3-w?g-.f?`gsF]Fv?g@ʥugbu?gNgжlt?g=ЂgnTs?gQ3og,'* +=r?g)[n)!r  r  r  gl'V3r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   )r  r  )rE   N)rj   rk   rl   rm   rp   r   )r8   asarrayrp  int32r   r   	csr_arrayoptimizer	   r   r/   linalgnormr  r  r   )r   
boundaries
eq_entries
eq_indizeseq_vars	eq_valuescoefficientsnp_eq_entriesnp_eq_indizes
np_eq_varsa_eqrm   rQ   resultr/   n_r_xn_rs                    r   test_bug_20336z LinprogHiGHSTests.test_bug_20336k  s>   
	#
9
N

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

:RZZ@

:RXX>ZZrxx8
||%%}mZ5P&Q,4 & 6zz)2::6JJ|2::6''4dQU/9 ( ;}}aHH		tax$/iinnV\\223U#r   N)rY  rZ  r[  r   r   r]  parametrizer}  r  	fail_slowr  r  r  r  r  r}   r   r   rq  rq    s    
B [[Y("o%rl)2.+R0;R@=rB92>BFK 	!	!I [[2/4 /4b.	M [[FGA$ HA$r   rq  c                   0     e Zd Zd Zd Zd Z fdZ xZS )TestLinprogSimplexDefaultc                     i | _         y r   r|  r   s    r   setup_methodz&TestLinprogSimplexDefault.setup_method  s	    r   c                 .    t        j                  d       y NzSimplex fails on this problem.rg  r   s    r   r  z'TestLinprogSimplexDefault.test_bug_5400      45r   c                 .    t        j                  d       y r  rg  r   s    r   test_bug_7237_low_tolz/TestLinprogSimplexDefault.test_bug_7237_low_tol  s     	45r   c                     | j                   j                  ddi       t        j                  t              5  t
        |           d d d        y # 1 sw Y   y xY wNr&  r  r   rA  r   r   r
   superr(  r   	__class__s    r   test_bug_8174_low_tolz/TestLinprogSimplexDefault.test_bug_8174_low_tol  G     	UEN+\\/* 	$G!#	$ 	$ 	$   AA)rY  rZ  r[  r  r  r  r  __classcell__r  s   @r   r  r    s    66
$ $r   r  c                   *     e Zd Zd Zd Z fdZ xZS )TestLinprogSimplexBlandc                     ddi| _         y )Nr  Tr|  r   s    r   r  z$TestLinprogSimplexBland.setup_method  s    r   c                 .    t        j                  d       y r  rg  r   s    r   r  z%TestLinprogSimplexBland.test_bug_5400  r  r   c                    | j                   j                  ddi       t        j                  t              5  t        j
                  t              5  t        | !          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )	r   rA  r   r   r-   r   r
   r  r(  r  s    r   r  z-TestLinprogSimplexBland.test_bug_8174_low_tol  sm     	UEN+]]>* 	(o. (%'(	( 	(( (	( 	(s#   A>A2!A>2A;	7A>>B)rY  rZ  r[  r  r  r  r  r  s   @r   r  r    s    '6( (r   r  c                       e Zd Zd Z ej
                  d      j                  dk  Zej                  j                  d      Zej                  j                  exr ed       fd       Z fdZd	 Z fd
Zd Zd Z xZS )TestLinprogSimplexNoPresolvec                     ddi| _         y )Nr5  Fr|  r   s    r   r  z)TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rs   linuxz"Fails with warning on 32-bit linux)	conditionrQ  c                 "    t         |           y r   )r  r  r  s    r   r  z*TestLinprogSimplexNoPresolve.test_bug_5400  s     	r   c                     | j                   j                  ddi       t        j                  t        d      5  t
        |          cd d d        S # 1 sw Y   y xY w)Nr&  r  zlinprog status 4r   )r   rA  r   r   r-   r  r
  r  s    r   test_bug_6139_low_tolz2TestLinprogSimplexNoPresolve.test_bug_6139_low_tol  sJ    
 	UEN+]]>1CD 	+7(*	+ 	+ 	+s   AAc                 .    t        j                  d       y r  rg  r   s    r   r  z2TestLinprogSimplexNoPresolve.test_bug_7237_low_tol  r  r   c                     | j                   j                  ddi       t        j                  t              5  t
        |           d d d        y # 1 sw Y   y xY wr  r  r  s    r   r  z2TestLinprogSimplexNoPresolve.test_bug_8174_low_tol  r  r  c                 .    t        j                  d       y Nz#Tests behavior specific to presolverg  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:r   c                 .    t        j                  d       y r  rg  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r  r   )rY  rZ  r[  r  r8   intpitemsize	is_32_bitr_  r`  r   is_linuxr   r]  r  r  r  r  r  r  r  r  r  s   @r   r  r    s    + 
##a'I||&&w/H[[(3  5 5 +6$;;r   r  c                        e Zd ZddiZej
                  j                  ej                  dk(  d       fd       Z	 xZ
S )TestLinprogIPDenser   FrO  z:Fails on some macOS builds for reason not relevant to testrP  c                 "    t         |           y r   r  r
  r  s    r   r
  z TestLinprogIPDense.test_bug_6139  s    
 	r   )rY  rZ  r[  r   r   r]  r^  r_  r`  r
  r  r  s   @r   r  r    sD    G [[ K   	 r   r  c                       e Zd ZdddZy)TestLinprogIPSparseCholmodTr   r   NrY  rZ  r[  r   r}   r   r   r  r    s    !t4r   r  c                       e Zd ZdddZd Zy)TestLinprogIPSparseUmfpackTFr  c                 .    t        j                  d       y )Nz2Failing due to numerical issues on some platforms.rg  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KKLMr   N)rY  rZ  r[  r   r  r}   r   r   r  r    s    !u5	Nr   r  c                       e Zd ZddddZej
                  j                  ej                  dk(  d      ej
                  j                  d       fd              Z
ej
                  j                  d	       fd
       Zd Zd Z xZS )TestLinprogIPSparseTFr   r   sym_posrO  /Fails on macOS x86 Accelerate builds (gh-20510)rP  rThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                 "    t         |           y r   r  r  s    r   r
  z!TestLinprogIPSparse.test_bug_6139#       	r   Fails with ATLAS, see gh-7877c                 "    t         |           y r   r  r  r  s    r   r  z!TestLinprogIPSparse.test_bug_6690-       	r   c                    t        d      \  }}}}}d}t        j                         5  t        rt        j                  dt
               t        j                  ddt               t        j                  ddt               | j                  D ci c]  }|| j                  |    }}d|d<   t        |t        t        |||| j                  |      }d d d        d	}	t        |	
       y c c}w # 1 sw Y   xY w)Nr!   r   r  zMatrix is exactly singularr  Fr5  r   r  r   )rR   r  r  r  r  r   r  r   r
   r   r	   rj   rk   r   r3   )
r   rl   rm   rQ   r  rp   r  r  r   r0   s
             r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve2  s    *1odAq!$$& 	9%%h?##68IK##9?L 48<<@Cdll3''@A@!AjM!T4tV!%a9C	9 )5 A	9 	9s   A%C-C($,C-(C--C6c                    t        d      \  }}}}}t        j                         5  t        j                  ddt               t        j                  ddt               | j
                  D ci c]  }|| j
                  |    }}d}|D ]?  }||d<   t        |t        t        ||t        | j                  |      }	d}
t        |	|
	       A 	 d d d        y c c}w # 1 sw Y   y xY w)
Nr!   r  r  zInvalid permc_spec option)NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r  r   )rR   r  r  r  r
   r   r	   rj   rk   rp   r   r3   )r   rl   rm   rQ   r  r  r  permc_specsr  r   r0   s              r   test_sparse_solve_optionsz-TestLinprogIPSparse.test_sparse_solve_optionsG  s    *1odAq!$$& 	>##3_F##5H37<<@Cdll3''@A@7K * >
",,atT4%)[[!=0=>	> 	>
 A	> 	>s   AC+CACCC")rY  rZ  r[  r   r   r]  r^  r_  r`  xfail_on_32bitr
  r  r  r  r  r  r  s   @r   r   r      s    5UCG[[ @   [[ !: ; ;	  [[=>  ? 6*>r   r   c                       e Zd ZdddZej
                  j                  ej                  dk(  d      ej
                  j                  d       fd              Z
d Zej
                  j                  d	       fd
       Z xZS )TestLinprogIPSparsePresolveT)r   r  rO  r  rP  r  c                 "    t         |           y r   r  r  s    r   r
  z)TestLinprogIPSparsePresolve.test_bug_6139_  r  r   c                 .    t        j                  d       y )Nz6_sparse_presolve=True incompatible with presolve=Falserg  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityi  s    LMr   r  c                 "    t         |           y r   r	  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6690l  r
  r   )rY  rZ  r[  r   r   r]  r^  r_  r`  r  r
  r  r  r  r  r  s   @r   r  r  \  s    48G[[ @   [[ !: ; ;	 N [[=>  ? r   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)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
       y )NTr  Fr  rb   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r(   )has_cholmodr  r_   r	   r   r   r.   )r   r   rO   rP   rQ   r4  r5  s          r   test_solver_selectz(TestLinprogIPSpecific.test_solver_selectx  s    !%48G!%59G!%5UKG2r"1aqqqgNqqq=$(( J"	0r   c                 b    dg}dg}t        ||| j                  ddd      }t        |d       y )Nr5   r  FT)r5  r   rF  r   )r	   r   r3   rQ  s       r   )test_unbounded_below_no_presolve_originalz?TestLinprogIPSpecific.test_unbounded_below_no_presolve_original  s:    D&![[+0dCE 	,r   c                 v    t        dd      \  }}}t        |||| j                  ddi      }t        |d       y )Nrb   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_cholesky  s=    2r"1aaaa)402);<r   c           
         t        dd      \  }}}t        j                         5  t        j                  ddt               t        j                  ddt
               t        j                  ddt               t        j                  ddt               t        |||| j                  ddd	      }d d d        t        d
       y # 1 sw Y   xY w)Nrb   r  r  r  rV  rW  T)ipr   r   r   r   )
r_   r  r  r  rG  r
   r   r	   r   r3   r   s        r   test_alternate_initial_pointz2TestLinprogIPSpecific.test_alternate_initial_point  s    2r"1a$$& 	>##6H##9?L##5}F##1=B !!!DKK)-t"<>C	> 	);<	> 	>s   B
CCc                 f   dg}dgdgg}ddg}dgdgdgg}g d}t        j                         5  t        j                  dt               t        j                  dd	t
               t        |||||t        | j                  d
di      }d d d        t        j                   d       y # 1 sw Y   !xY w)Nr%   r   r  r   r{   rw   r:  r  r  r5  Fr   r   )r  r  r  rG  r  r
   r	   rp   r   r   r   r  s          r   r;  z#TestLinprogIPSpecific.test_bug_8664  s    CaSz1vbTA3$$& 	K!!(N;##9?L!T4tV!%z56IKC		K 	CKK!?@	K 	Ks   AB''B0N)	rY  rZ  r[  r   r  r!  r#  r&  r;  r}   r   r   r  r  r  s!    F0-==$Ar   r  c                   :    e Zd Zi Zd Zd Zd Zd Zd Zd Z	d Z
y)	TestLinprogRSCommonc                 .    t        j                  d       y rl  rg  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland  rm  r   c                     t               \  }}}}}}}t        |||||t        | j                  | j                  |	      }t        |||       t        |j                  d       y Nr   r   x0r   r   r   r	   rp   r   r   r3   r   r   r  s	            r   "test_nontrivial_problem_with_guessz6TestLinprogRSCommon.test_nontrivial_problem_with_guess  Y    4F4H14tT66atT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}g d}t        ||||||| j                  | j                  |	      }	t	        |	||       t        |	j                  d       y )N)r   r   r   r   r-  r   r   r   r	   r   r   r3   r   r   
r   rQ   rj   rk   rl   rm   r~   r   rp   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variables  s^    4F4H14tT66FatT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}g d}t        ||||||| j                  | j                  |	      }	t	        |	||       t        |	j                  d       y )N)r  r   Nr   r  g333333?r-  r   r   r3  r4  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variables  s^    4F4H14tT66<atT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}dg}t        j                  g d      }d}g d}t        ||||||| j                  | j
                  |	      }	t        |	||       t        |	j                  d       y )Nr%   )gibl3g%G/?r   r  g@Q$@)r   r7  r   r8  r-  r   r   )	r   r8   rB   r	   r   r   r3   r   r   r4  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variable  sy    4F4H14tT66s67?atT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}g d}t        |||||t        | j                  | j                  |	      }	t        |	j                  d       y N)r   r   r!   rd   r-  rv   r   r	   rp   r   r   r   r   
r   rQ   rj   rk   rl   rm   r~   r   	bad_guessr   s
             r   &test_nontrivial_problem_with_bad_guessz:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guess  R    4F4H14tT66!	atT4![[$,,9NSZZ#r   c                    t         j                  j                  d      }t        d|      \  }}}}}|j                  |j                        }t        j                         5  t        j                  ddt               t        j                  ddt               t        j                  dt               t        |||| j                        }t        |||| j                  |j                        }t        ||z   ||| j                  |j                        }	d d d        t        j                   	       t#        |j$                  d
       t        	       t'        |	j$                  |j$                  k         y # 1 sw Y   dxY w)Nl   %4| r!   r  r  r  r  )rl   rm   r   )rl   rm   r   r.  r   r   )r8   r9   r:   rR   rE   r  r  r  r
   rG  r  r   r	   r   r/   r3   r.   r   r   r   )
r   rG   rO   rP   rQ   r  r  r   r5  res3s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  s(   ii##O4$QC01aAJJqww$$& 	P##3_F##5~G!!(M:!!!DKK@C111T[[SUUKD1q5qqOD	P 	#''2TXXq!377"#	P 	Ps   "B5E::FN)rY  rZ  r[  r   r  r0  r5  r9  r;  rA  rE  r}   r   r   r)  r)    s*    G8!!!	!$$r   r)  c                       e Zd ZddiZy)TestLinprogRSBlandpivotr  Nr  r}   r   r   rG  rG   	  s     Gr   rG  c                       e Zd ZdZi Zd Zy)TestLinprogHiGHSSimplexDualr   c                 |   t               \  }}}}t        ||||| j                  | j                        }t	        |j
                  d       t        |j                  du       t        t        j                  |j                  dkD               t        t        j                  |j                  |D cg c]  \  }}|t        j                  n| c}}k               t        t        j                  |j                  |D cg c]  \  }}|t        j                   n|dz
   c}}k\               yc c}}w c c}}w )z
        The scaled model should be optimal, i.e. not produce unscaled model
        infeasible.  See https://github.com/ERGO-Code/HiGHS/issues/494.
        )rj   rk   rp   r   r   r   Ngưr  )r   r	   r   r   r   r   r   r/   r8   allr   re   )r   rQ   rj   rk   r   r   rn   ro   s           r   test_lad_regressionz/TestLinprogHiGHSSimplexDual.test_lad_regression	  s    124tadd![[$,,@SZZ#T!"syy5()*suu/3!5%+R ,.:2!= !5 5 6 	7suu/3!5%+R -/J"&&BI!E !5 5 6 	7!5!5s   1D2"D8N)rY  rZ  r[  r   r   rM  r}   r   r   rJ  rJ  		  s    FG7r   rJ  c                       e Zd ZdZi Zy)TestLinprogHiGHSIPMr  N)rY  rZ  r[  r   r   r}   r   r   rO  rO  %	  s    FGr   rO  c                   r   e Zd ZdZi Zej                  j                  d      ej                  j                  e	j                  dk  xr  ej                         dk(  dd      d               Zd	 Zd
 Zd Zd Zej                  j$                  d        Zej                  j$                  d        Zd Zd Zy)TestLinprogHiGHSMIPr   ra   l        LinuxFzgh-16347)r  runrQ  c           	         d}t        |      \  }}}}}dgt        |      z  }dgt        |      z  }t        |dz  |||| j                  |      }	|j	                         |	j
                  z  j                  |dz  ||      }
t        j                  |
d      }t        j                  j                  |j                  d      |       t        j                  j                  |j                  d      |       t        j                  j                  t        j                  |      j                         |       t        j                  j                  t        j                  |d d d d df         j                         |       t        j                  j                  |	j
                  t        j                  |	j
                        d	
       y )Nr%   r   r   r   rQ   rl   rm   rp   r   r   r   rI  r5   r  r  )rR   r   r	   r   rA   r/   r<   r8   rg  r  r   diaground)r   rF   rO   rP   rQ   rI   rH   rp   r   r   ssquares               r   	test_mip1zTestLinprogHiGHSMIP.test_mip13	  sT    *1o1a!CF"cCFl!!!F![[kC __&//1a;"


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


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


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


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


""355"((355/"Fr   c                    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                  |j                  ddg       t         j                  j                  |j                  d
       y )Nr   r   r{   ra   r5   r  r   r   r	  rx   )r8   rB   re   r   	ones_liker	   r   r  r   r/   r.   r  s          r   	test_mip2zTestLinprogHiGHSMIP.test_mip2M	  s     xx!R2r(+,xxR!XXq!fArvv;-#a&01ll1o4![[kC 	

""3551a&1


""377B/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                  |j                  d       t        j                  |j                  ddg      s%t        j                  |j                  ddg      sJ y y )	Nr5   r   r!   r   r  r   r	  r   )r8   rB   re   r   r	   r   r  r   r.   r  r/   r  s          r   	test_mip3zTestLinprogHiGHSMIP.test_mip3`	  s     xx"a1a&1a&12xx$XXq!fbff+Q'cCFl4![[kC 	

""377B/{{3551a&)R[[A-GGG-G)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dg}t	        ||||| j
                  |	      }t         j                  j                  |j                  d
dg       t         j                  j                  |j                  d       y )Nr5   r   r|   r   r   )rt  irb   rs   r   r	  g      @rz   ;   )
r8   rB   re   r   r	   r   r  r   r/   r.   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4q	  s     xx"bB8aV45xx&HHaVbff+Q'!f4![[kC 	

""3553(3


""377B/r   c           
         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                  |j                  g d
       t         j
                  j                  |j                  d       |j                  dd       J |j                  dd       J |j                  dd       J y )Nr  rz   )r%   r   r   r  )rx   r   r5   r   r   r8  )rQ   rj   rk   rl   rm   rp   r   r   )r   rv   r   imip_node_countmip_dual_boundmip_gap)
r8   rB   re   r	   r   r  r   r/   r.   r=  )	r   rj   rk   rl   rm   rQ   rp   r   r   s	            r   	test_mip5zTestLinprogHiGHSMIP.test_mip5	  s    xx$xx}xx$xx~HH\"bff+266{F34d#DKK"-/ 	

""355)4


""377C0 ww'.:::ww'.:::wwy$'333r   c                 d   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                  |j                  d       y )Nr  r  r  r  r  r!   rt  r  '   r  r  r  r  r  r  r  r  rt  r  r  r  &   r  r  )   r  r  r  r  rm  r  r  i  i(  i:,  i/  r   ra   r  r  rz   r  rz   r!   r   rs   r   rU  i>  )r8   rB   re   r	   r   r  r   r.   )r   rl   rm   rQ   rp   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip6	  s     xx8999; < xx34HH01bff+qc!e4![[kC 	

""377D1r   c                 6   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 ]G  }t        |t        t
        |||| j                  |d|i	      }	|	d   }
|
|k  sJ |j                  |
       I t        j                  t        j                  |            }t        j                  |dk\        sJ t        j                  |dk(        rJ y )Nri  rj  rl  rn  rp  rq  r   rs   r   )rd   g      ?g{Gz?r  mip_rel_gap)	rQ   rj   rk   rl   rm   rp   r   r   r   rf  )r8   rB   re   r	   rj   rk   r   r@   difffliprL  )r   rl   rm   rQ   rp   r   mip_rel_gapssol_mip_gapsrt  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdown	  s   
 xx8999; < xx34HH01bff+qc!e/' 		/KADt$T!'&1#0+">@C  	NM !K///.		/" GGBGGL12	vvi1n%%%66)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	                  |j
                  g d       |j                  dk(  sJ y )	N)r   r   r5   r5   rd   r.  )r   r!   r   r!   r   )rp   r   r   )r   r   r.  r   r   )r8   rB   r	   r  r   r/   r   )r   rQ   rp   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuous	  s    
 HH%&C:SzC:SzJKhh|,a"-g? 	

""355.9zzQr   c           	      $   ddg}ddgg}dg}t        |||ddg      }t        |||t        j                  ddg            }t        |||d      }t        |j                  |j                         t        |j                  |j                         y)z
        Test that when integrality is a list of all zeros, linprog gives the
        same result as when it is an array of all zeros / integrality=None
        r   r5   r   r   r   N)r	   r8   r  r   r/   )r   rQ   rj   rk   r4  r5  rD  s          r   test_bug_20584z"TestLinprogHiGHSMIP.test_bug_20584	  s    
 FQyvqt$QFCqt$BJJ1v<NOqt$DATVVTVV$TVVTVV$r   N)rY  rZ  r[  r   r   r   r]  r  r  r_  maxsizer`  systemrZ  r]  r_  rb  rg  xslowrr  r{  r}  r  r}   r   r   rQ  rQ  /	  s    FG[[2[[#++"7 #4&x(G3 (  *G	* 
G*0&H"0 40 [[2 2$ [[#* #*J%r   rQ  c                   \    e Zd ZddiZej
                  Zej                  Zej                  Zy)AutoscaleTestsrU  TN)rY  rZ  r[  r   r   r
  r  r   r}   r   r   r  r  	  s-    D!G&44M&44M&44Mr   r  c                       e Zd ZdZd Zy)TestAutoscaleIPr   c                 J    d| j                   d<   t        j                  |       S )Nr'  r&  )r   r  r
  r   s    r   r
  zTestAutoscaleIP.test_bug_6139
  s!    #U++D11r   N)rY  rZ  r[  r   r
  r}   r   r   r  r  	  s    F2r   r  c                       e Zd ZdZy)TestAutoscaleSimplexr   Nrc  r}   r   r   r  r  
  s    Fr   r  c                       e Zd ZdZd Zd Zy)TestAutoscaleRSr   c                     t               \  }}}}}}}t        |||||t        | j                  | j                  |	      }t        |||       t        |j                  d       y r,  r/  r  s	            r   r0  z2TestAutoscaleRS.test_nontrivial_problem_with_guess
  r1  r   c                     t               \  }}}}}}}g d}t        |||||t        | j                  | j                  |	      }	t        |	j                  d       y r=  r>  r?  s
             r   rA  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess
  rB  r   N)rY  rZ  r[  r   r0  rA  r}   r   r   r  r  

  s    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y)RRTestsr   N)rY  rZ  r[  r   r   LCTr  test_RR_infeasibilityrN  r  r  	test_NFLCr  r}   r   r   r  r  !
  sE    F
CDD''N%%M66I11r   r  c                       e Zd ZddiZy)	TestRRSVDr   SVDNr  r}   r   r   r  r  -
  s    E"Gr   r  c                       e Zd ZddiZy)TestRRPivotr   rH  Nr  r}   r   r   r  r  1
  s    G$Gr   r  c                       e Zd ZddiZy)TestRRIDr   IDNr  r}   r   r   r  r  5
  s    D!Gr   r  )NN:0yE>r  r   )r   )r   rs   rw   r#  )Vr\  r_  r`  r  numpyr8   numpy.exceptionsr   numpy.testingr   r   r   r   r   r   r   scipy.optimizer	   r
   scipy.optimize._numdiffr   scipy.sparse.linalgr   scipy.linalgr   scipy.sparser   r  scikits.umfpackr   ImportErrorr  sksparsesksparse.cholmodr   cholmodr   r   r"   r&   r3   rR   r_   rq   r   r   r   r   r   r   r   r   rj   rk   rl   rm   rp   r   r]  r  rb  re  rj  rq  r  r  r  r  r  r  r   r  r  r)  rG  rJ  rO  rQ  r  r  r  r  r  r  r  r  r}   r   r   <module>r     s        6. . * 3 5 1 &  . 4
LFEK 6:$(.(?D6- 5 F4>9>%*#ZE 	Z. Z.D+ 89,  : 89B' B :B 898' 8 :8:s$* s$v$ 3 $*(1 ("%;#6 %;Z	  	  5^ 5 N^ N9>. 9>x .  , 89CA CA :CAV?$. ?$D! !7"3 78+ ~% ~%L 895 5 :52n 2> $n $. 892 2 :2# #%' %"w "}P  K  Ks$   J  
J  J
JJJ