
    tKgO~                    6   d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ ddlZddlZd
Z	 ddlmZ d
Z 	 ddl!Z!ddl"m#Z$ d Z%d Z&d Z'd Z(	 	 dUdZ)d Z*d Z+dVdZ,d Z-dWdZ.d Z/d Z0d Z1d Z2d Z3d Z4dZ5dZ6dZ7dZ8dZ9 G d d      Z:ejv                  jy                  d        G d! d"e:             Z=ejv                  jy                  d        G d# d$e:             Z>ejv                  jy                  d        G d% d&e:             Z? G d' d(e:      Z@ G d) d*e=      ZA G d+ d,e=      ZB G d- d.e=      ZC G d/ d0e>      ZDe r G d1 d2e>      ZEer G d3 d4e>      ZF G d5 d6e>      ZG G d7 d8e>      ZHejv                  jy                  d        G d9 d:             ZI G d; d<e?      ZJ G d= d>e?      ZK G d? d@e@      ZL G dA dBe@      ZM G dC dD      ZNejv                  jy                  d        G dE dF             ZO G dG dHeO      ZP G dI dJeO      ZQ G dK dLeO      ZRejv                  jy                  d        G dM dN             ZS G dO dPeS      ZT G dQ dReS      ZU G dS dTeS      ZVy# e$ r dZY 3w xY w# e$ r dZ Y 4w xY w)Xz"
Unit test for Linear Programming
    N)assert_assert_allcloseassert_equalassert_array_lessassert_warnssuppress_warnings)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarning)VisibleDeprecationWarningT)UmfpackWarningF)choleskyc                     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     e/home/alanp/www/video.onchill/myenv/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(   3   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_successr5   =   s    
 ;;

|;s{{mDS!!Q L!	. y E!	. r   c           	         t         j                  j                  d       | | 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              }
t         j                  j                  |	j                  d         }|	|
|||fS )z
    Generates a linear program for which integer solutions represent an
    n x n magic square; binary decision variables represent the presence
    (or absence) of an integer 1 to n^2 in each position of the square.
    r   r   r   r'   Ndtype)nprandomseedarangereshapezerosrangecopyappendflattenarrayvstackfloatrandshape)nMnumbersr?   A_listb_listiA_rowjAbcs               r   magic_squarerT   Q   s    IINN1	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
		qwwqz"AaGQr   c                 d   t         j                  j                  d       t         j                  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
    r   sizer   N)	r:   r;   r<   exponentialr?   r@   rE   hstackravel)mrI   rS   ArowbrowrP   j1AcolbcolrQ   rR   s              r   lpgen_2dra      s#   
 IINN1
))

aV

,,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                 @   t         j                  j                  |        d\  }}}t         j                  j                  |      dz
  }t         j                  j                  ||      dz
  }t         j                  j                  |      dz
  }t         j                  j                  ||      dz
  }t         j                  j                  |      dz
  }t         j                  j                  |       }	t         j                  j                  |      }
t         j                   |	|	t         j                  j                          k  <   t         j                  |
|
t         j                  j                         kD  <   t        j
                  |	|
f      j                  }||||||fS )N)
      2         ?)r:   r;   r<   rG   infrE   T)r<   m_eqm_ubrI   rS   A_ubb_ubA_eqb_eqlbubboundss               r   very_random_genrr      s'   IINN4MD$
		q#A99>>$"3&D99>>$#D99>>$"3&D99>>$#D
))..
	B		B"$&&BrRYY^^ "BrBIINN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)r7      r'   )rv      	   )r   r7   r   )rc   rv      )rw   r7   r#   r'   )ry   rw   ru   rw   )rz   r   r   )gk椀?gs?r   gkL?gqY:^@ )rS   rk   rl   rm   rn   x_starf_stars          r   nontrivial_problemr      sO    AD DD4D5FFdD$ff44r   c                 8   t         j                  j                  |        t         j                  j                  dd||f      }t         j                  j	                  |      }t         j                  j                  dd||f      }|||z  z  t         j                  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
    r   r   rV   h㈵>Nr   r7   NNr   N)r:   r;   r<   normalrandnonesscipysparse
lil_matrixr@   tocscr?   )r<   r[   drI   phiw_truer1   yrS   rk   idxiirl   bndss                 r   l1_regression_probr      s    IINN4
))

1aq!f

-CYY__QF
		AQF+A#'RYY--aA->>A 	!AAbqE<<""AaC1:.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'   nitr1   r0   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   ry   r   r   r   rc   rt   r'   rk   rl   callbackmethod      2rw   r2   r3   r0   r1   r   r   )r:   rD   r
   r   r5   r   )selfr   rS   rk   rl   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)Nry   r   r   r   r   r   ekki-ekki-ekkirk   rl   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrk   rl   options)r:   rD   assert_raises
ValueErrorr
   pytestwarnsr   )rS   rk   rl   r.   s       r    test_unknown_solvers_and_optionsr     s    
"bAFQFQF#DD*g$T2BD*g$T,@NG	oW	54$&67	9 
6	5	5s   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 )Nry   r   r   r   r   r   highsr   r   rw   r   )r:   rD   r
   r5   )rS   rk   rl   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   '  sr    	(	)*+ 
*	(	)+, 
*	(	))$ 
*	)	 
*	)	)	)	)	)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   rw   r   r   
time_limit皙?)rS   rm   rn   rq   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rc   highs-dsrS   rm   rn   rq   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r7   )rq   r   z+The problem is infeasible. (HiGHS Status 8:r   r7   z+The problem is unbounded. (HiGHS Status 10:r#   )_highs_to_scipy_status_message:   zHello!z;The HiGHS status code was not recognized. (HiGHS Status 58:r'   z>HiGHS did not provide a status code. (HiGHS Status None: None))r
   r   r.   
startswithrT   lenscipy.optimize._linprog_highsr   )r   r4   rQ   rR   rS   rK   rJ   rq   r   r   r   r   r.   s                r   test_highs_status_messager   0  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   r7   r         rk   rl   r   )r
   r~   r   r   test_bug_17380r   ]  s     QF2q'$aVDr   c                   >   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOePj                  j                  eSj                  dNk(  dOP      dQ        ZUdR ZVyS)TLinprogCommonTestsa  
    Base class for `linprog` tests. Generally, each test will be performed
    once for every derived class of LinprogCommonTests, each of which will
    typically change self.options and/or self.method. Effectively, these tests
    are run for many combination of method (simplex, revised simplex, and
    interior point) and options (such as pivoting rule or sparse treatment).
    c                     t        |        y N)r   r   s    r   test_callbackz LinprogCommonTests.test_callbacky  s
    d#r   c                 v    t        dd      \  }}}t        |||| j                  ddi      }t        |d       y )Nrd   dispTrk   rl   r   r   T*Pr2   ra   r
   r   r5   r   rQ   rR   rS   r   s        r   	test_dispzLinprogCommonTests.test_disp|  s;    2r"1aaaa%tn.7r   c                     ddg}ddgddgg}ddg}d}d}t        |||||f| j                  | j                  	      }t        |d
       y )Nr7   r'   ry   r   r   rw   r   ry   N)rk   rl   rq   r   r   r   )r
   r   r   r5   )r   rS   rQ   rR   	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rm   rn   r   r   )r   	TypeErrorr
   r   r   )r   rS   rm   rn   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   )r:   rD   rA   rg   r
   rm   rn   r   r   r5   r   )r   rS   rk   	b_ub_origrl   rq   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   )r:   rD   rA   rg   r
   rk   rl   r   r   r5   r   )r   rS   rm   	b_eq_origrn   rq   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   r5   r   rS   rk   rl   rm   rn   rq   r   s           r   test_non_ndarray_argsz(LinprogCommonTests.test_non_ndarray_args  sb     EwuwuatT4![[$,,@qc:r   c                      t        j                  ddg      }ddgddgddgg}g d}d d d d d i f fd	} j                  D ci c]  }| j                  |    }}d|d	<   t        t        |||||
       y c c}w )Nry   r   r   r   r   r   c           
      @    t        | |||||j                  |       y Nr   r
   r   )rS   rk   rl   rm   rn   rq   r   r   s          r   fz2LinprogCommonTests.test_unknown_options.<locals>.f  s     AtT4v;;9r   *   spamr   )r:   rD   r   r   r   )r   rS   rk   rl   r  keyos   `      r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s    HHb"XAAA'Db	9
 04||<|S$,,s##|<&	_aTa	9 =s   A6c           	      L   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                  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)Nr7   r   r#   r   r      r	  r   rS   rk   rl   rq   r   r   ?ffffff@ffffff)r:   rD   rg   r   testingr   r   r
   r   r   r1   r0   r   rk   rl   rS   rq   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ZZ$$_5ADtF!%+GC 6 	

""3553*5


""377D1 65s   DD#c                     d fd	}t        t        |g dddg       t        j                  j	                         5 }|j                  t        d       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   rS   rk   rl   rm   rn   rq   r   s         r   r  z1LinprogCommonTests.test_invalid_inputs.<locals>.f  $    AtT4v;;>r   r   r   r#   r   r#   r'   rq   zCreating an ndarray from ragged)r   r  )r#   r'      r   r   r   r   )rk   rl   )rm   rn   _sparse_presolve)r   r   r#   )rk   rn   NNNNN)	r   r   r:   r  r   filterr   r   r?   )r   r  sups   `  r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  s6   	>
 	j!Y7GHZZ))+sJJ02ST*a;VW , 	j!Y7HI 	j!aVAq6(!QHj!aVA3%qcBj!aVAq6(!QHj!aVA3%qcBj!aV1#A> $,,./0 	j!aV"((92EAN% ,+s   .EEc           	      :    d fd	}t         j                  j                  d       d}d}t        j                  j                  ||d      }t         j                  j                  |      }t         j                  j                  |      }|t         j                  j                  |      z   }|t         j                  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   r   d      rf   >   r   r   zMethod 'z.' does not support sparse constraint matrices.r   r   >   r   Tr   r  )r:   r;   r<   r   r   rG   r   column_stackr   r   r   r
   r   r   )r   r  r[   rI   rm   x_validrS   rp   ro   rq   rn   r   r   s   `            r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  s]   	> 			q||  As+))//!$IIOOAryy~~a((ryy~~a(("b*g~;;88z8DKK= IN 2N O!$T&#{{DLLBO O '&G{{00$(!ADtF!%g?C;;;O Os   &FFc                     g d}g dg dg dg}g d}t         j                  j                  d       d}t        |||| j                  d|i	      }t        ||       t        |j                  |       y )
Nr'   rt   r#   r   r   r   r   r  r#   r7   r   r   r#         @rt   r   r7   r   rt   rc   r'   r   r   r7         iX  r   r#   r   r   )r:   r;   r<   r
   r   r   r   r   )r   rS   rQ   rR   r   r   s         r   test_maxiterzLinprogCommonTests.test_maxiter  si    ! " 
		q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   rq   r   r   r   r  ))r  r  )r7   r7   )r#   r#   r	  )r  r7   r#   )r   r#   r   )r   r   r   r   r   r   r   r   r   r{   ))r  )r   rc   )      @r7  rm   rn   rq   r   r      )r   r{   r7  )r   getr
   r   r5   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 )	Nr2  Tr   r  r3  r   r  ))r  r   r   r  )r   r:  r
   r   r!   r   r   r;  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleM  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)Nr2  Tr   r  r   r  c                 N    t        | |j                  j                        }|S )Nr3  r  )rS   rq   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gu  s$    a%)[[$,,H
r   r  rS   rq   r   r   r   )r   r:  r   r:   rg   r   r   RuntimeWarningr	   
IndexErrorr
   r!   r   r   )r   r<  simplex_without_presolverS   bounds_1bounds_2rB  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2d  sh    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 )Nr7   r   r   )r
   r   r   r$   )r   rS   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)r7   r   r7   r   r   r7   r   r3  r2  T)	r:   rg   r
   r   r   r$   r:  r   r   r   rS   rq   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   r7   r   r7   r   rM  r3  )r   r   r7   r   r   r3   r2   )r:   rg   r
   r   r   r5   rN  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   r7   r   r   r   r   irw   r   	r:   rD   r
   rm   rn   rq   r   r   r5   r   rS   rk   rl   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 )Nrw   r#   r   r7   r   r   )r   r7   r7   r   r  gUUUUUU?gUUUUUU?r   r
   rm   rn   rq   r   r   r5   rU  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   r3   )r
   rk   rl   rm   rn   r   r   r5   rN  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   r:   rD   r
   rk   rl   r   r   r5   r   rS   rm   rn   rq   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  rf   r   rQ  r:   r   eyerD   rg   r
   rk   rl   r   r   r5   sumr_  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   r^  r_  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   rQ  rb  r_  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   rQ  rb  r_  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 )Nr7   r'   ry   r   r   r8   rw   r   gm۶m&g$I$Ig%I$I@r   )
r:   rD   float64rg   r
   rm   rn   r   r   r5   )r   rS   rk   rl   r   r   rq   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   r{   r   r   r   )   r   r#   r   r   r   r   )r
   rm   rn   r   r   r!   r   rS   rk   rl   rq   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 rp  )r
   rk   rl   r   r   r!   r_  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'   rt   r   rr  Fr2  r   )r   r
   rm   rn   r   r!   )r   rS   rk   rl   rq   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           
         d\  }}t         j                  j                  d       t         j                  j                  |      }d|d<   t         j                  j                  ||      }d|d d df<   t         j                  j                  |      }g dg}d}g d}t	        ||||||| j
                  | j                        }	t        |	d	       y )
Nr  r   r   )r   r   r   r   r#   )rz   rc   rz  )rz   Nr   r   gyMj#r   )r:   r;   r<   rG   r
   r   r   r5   
r   r[   rI   rS   rm   rn   rk   rl   rq   r   s
             r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1&  s    1
		qIINN1!yy~~a#QT
yy~~a ~BatT4![[$,,@)<=r   c           
         | j                   dv rt        j                          t        j                  j                  d       d\  }}t        j                  j                  |      }d|d<   t        j                  j                  ||      }d|d d df<   t        j                  j                  |      }t        j                  j                  ||      }d|d d df<   t        j                  j                  |      }d}t        ||||||| j                   | j                        }	t        |	       | j                  j                  dd	      r&d
| j                   vrt        |	j                  d       y y y )N>   r   	highs-ipmr   r&   r7   r   r   r   r2  Tr   )r   r   xfailr:   r;   r<   rG   r
   r   r$   r:  r   r   r{  s
             r   test_zero_column_2z%LinprogCommonTests.test_zero_column_25  s   ;;33LLN
		q1IINN1!yy~~a#QT
yy~~a yy~~a#QT
yy~~a 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
   rk   rl   rq   r   r   r5   r   rS   rm   rn   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1P  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   rX  )r   rk   rl   rS   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2X  sF    9i0atT4![[$,,@+r   c           
         d\  }}t         j                  j                  |      }t         j                  j                  ||      }d|dd d f<   t         j                  j                  |      }t        |t        t
        ||t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y Nr&   r   r   r2  T)r:   r;   rG   r
   rk   rl   rq   r   r   r!   r:  r   r   )r   r[   rI   rS   rm   rn   r   s          r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3`  s    1IINN1yy~~a#QT
yy~~a atT4![[$,,@3 <<J-!$ .r   c           
         d\  }}t         j                  j                  |      }t         j                  j                  ||      }d|dd d f<   t         j                  j                  |       }t        |||t        t
        t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y r  )r:   r;   rG   r
   rm   rn   rq   r   r   r!   r:  r   r   )r   r[   rI   rS   rk   rl   r   s          r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4n  s    1IINN1yy~~a#QT
		q!!atT4![[$,,@3 <<J-!$ .r   c           
         g d}g dg dg dg dg}g d}t        |t        t        ||t        | j                  | j
                        }t        |       | j
                  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   r2  Tr   )
r
   rk   rl   rq   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  r7   r   r   r   r  )r   r   r   r'   r   r   r   r   r   r2  Tr   	r
   rm   rn   r   r   r!   r:  r   r   rs  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   rf   r   )r
   rm   rn   r   r   r5   rs  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 )Nr7   r   r   )r   r   r6  r   )r
   rm   rn   rq   r   r   r!   rU  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  rw   r   r2  Tr   r  rs  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   r7   r   r   )	r:   rD   r
   rm   rn   rq   r   r   r$   rU  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   Fr2  rC  r   r  )r   r
   r   r   r   r$   )r   rS   rq   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   r7   r7   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r7   r   r   r   )r   r   r   rM  rM  r   r   r   r7   N$   $The problem is (trivially) unboundedr:   rD   r
   rm   rn   r   r   r$   lowerr   r   r1   rg   r.   rs  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   r7   r   r  r  )r   r   r   r   r   r   r  )r   r   r   rM  rM  )Nr   r   r   r7   Nr  r  r  rs  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"  rc   r   r7   r4  )rd   r   r   )   rd   r   )r   r"  '  r   )r   r   r  gh㈵>Hz>)r3   r-   r,   rT  rU  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)rz   9   rx   g      8@)rf   g      r   rx   )rf   g      r  r   r  )r   r   r   r"  r   r   r   bland)r   r   r   r   r[  )r:   rD   r   itemsr
   rm   rn   rq   r   r:  r   r5   )	r   rS   rk   rl   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                  |      }t         j                  j                  ||      }t         j                  j                  |      }d|dd d f   z  |dd d f<   |dxx   dz  cc<   t               5 }|j	                  t
        d       t        |t        t        ||t        | j                  | j                        }d d d        t               y # 1 sw Y   xY w)N)rc   rc   r   r   r7   A_eq does not appear...r   )r:   r;   rG   r   r  r   r
   rk   rl   rq   r   r   r!   )r   r[   rI   rS   rm   rn   r  r   s           r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility%  s     1IINN1yy~~a#yy~~a $r1u+oRURB CJJ(AB!T4tV!%dllDC ! 	3	 ! s   A
C,,C5c           
          t               \  }}}}}}}t        |||||t        | j                  | j                        }t        |||       y )Nr   r   )r   r
   rq   r   r   r5   	r   rS   rk   rl   rm   rn   r   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem8  sL     5G4H14tT66atT4![[$,,@6Br   c                 d   t        dd      \  }}}t               5 }|j                  t        d       |j                  t        d       |j                  t
               t        |||t        t        t        | j                  | j                        }d d d        t        d       y # 1 sw Y   xY w)Nrd   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )ra   r   r  r   rD  r   r
   rm   rn   rq   r   r   r5   )r   rk   rl   rS   r  r   s         r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problem@  s     !R(dA CJJ(NOJJ~'BCJJ}%!T4tV!%dllDC	 ! 	7 ! s   A5B&&B/c                    g d}d\  }}|||d|dddd|ddg|dd|d|ddddddgdd||ddddddddgdddddd||dd|dgdddd|||d|dddgddddddd||dd|gddddddddd|||gg}g d}t               5 }|j                  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'   rx      r'   r#   rt   r{   r   r9        rM  r   )r      i!   r   r   ir   i  ư>r  )r2   r-   r,   )
r   r  r   r
   rk   rl   rq   r   r   r5   )r   rS   rI   prm   rn   r  r   s           r   test_network_flowz$LinprogCommonTests.test_network_flowM  s:    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 + CJJ}%!T4tV!%dllDC ! 	4dC	 ! s   5A	CCc                    g d}ddgddgddgddgddgg}d\  }}||dddg|d||dgd||d|gddd||gg}g d}t               5 }t        r|j                  t               |j                  t        d	       |j                  t
        d
       |j                  t
        d       |j                  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  rM  )r}   r   r   r'   scipy.linalg.solve
Ill...r  Solving system with option...r   rq  r   )r   has_umfpackr  r   rD  r   r   r
   rk   rl   r   r   r5   )	r   rS   rq   rI   r  rm   rn   r  r   s	            r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityb  s    FFFFF 11aO1aO1aO1aO	
  C

>*JJ~'CDJJ(ABJJ(GHJJ}%!T4tV!%dllDC ! 	, ! s   B"C;;Dc           
          g d}g dg dg}ddg}t        |||t        t        t        | j                  | j
                        }t        |d       y )	N)r   ry   r}   )r#   r   r   )r   r  r#   rc   r9  r   ir   rX  rU  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,  r-  r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r  )r2   r3   r-   r,   r  r  s        r   test_enzo_examplez$LinprogCommonTests.test_enzo_example  sX     ! " atT4![[$,,@"@!	.r   c                 &   g d}g dg dg dg dg dg}g d}t               5 }|j                  t        d       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%)r7   r7   r7   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r  皙?333333?r  r  r  r   gRQ)r  g?        r  r   r  r   )
r   r  r   r
   rk   rl   rq   r   r   r5   )r   rS   rm   rn   r  r   s         r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  s    /%""""	$
 * CJJ(AB!T4tV!%dllDC ! 	"@	B	 ! 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 )Nrd   r   r   r   r   r   )r:   r   pir=   rE   cossinr
   rk   rl   rq   r   r   r5   r?   )r   r[   rS   tmprm   rn   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 )Nre   r   r   r  r   r   )r:   r   r  r=   r  r  rE   r
   rk   rl   rq   r   r   r$   )	r   r[   rS   r  row0row1rm   rn   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 )Nre   r   r   Fr2  r   )r:   r   r  r=   rE   r  r  r   r
   rk   rl   rq   r   r!   )	r   r[   rS   r  rm   rn   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   r7   r   r7   r   )r   r   r7   r   r7   r   r   r   g>)r2   r3   r-   )r:   rD   r
   rq   r   r   r5   
zeros_like)r   rS   rk   rl   rm   rn   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   rk   rl   rm   rn   rq   r   r   r   z%Optimization terminated successfully.gdy=r-   )eqlinineqlinr  upper	marginalsresidual)rr   r
   r   r   r   r   r   r   r.   r   r1   r0   r   r   keysr   r:   ndarray)	r   rS   rk   rl   rm   rn   rq   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9Cchhj !#c(;"7DDD!#c(:"6

CCC :r   c           /         g d}d}d}d}t        j                  g dddd|dd	dd
ddd
dd
ddddddgddd|ddd	d
d
dd
d
dddddddgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddd
d
dddd
||ddd|dddddgdddddd
d
dddd
||d|ddddgdd
dd ddd|d
d
ddddd|dddgddddd
dd
ddd|d
|ddd|ddgdd
d
d ddd||d
ddddddd|dgddddd
d
dddd||d
ddddd|gg      }t        j                  g d!      }t        j                  g d"      }t               5 }|j                  t        d#       |j                  t
        d$       |j                  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   ry   r   r   r   r7   r7   r   r7   r7   r   r   r   r   r   r   r   r   g333333ry   r7   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   gףp=
?r   gffffff?g @)r  r   r   r"  r"  r"  r"  r"  r"  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   g^Zr   )r:   rD   r   r  r   rD  r   r
   rm   rn   r   r   r5   )
r   rq   r  rB  hrk   rl   rS   r  r   s
             r   test_bug_5400z LinprogCommonTests.test_bug_5400  sV   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 CJJ=?JJ~'BCJJ}%!T4tV!%dllDC ! 	)<= ! s   1A1F88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   r:   rD   r
   r   r   r5   )r   rS   rm   rn   rk   rl   rq   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139;  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               5 }t        r|j                  t               |j                  t        d       |j                  t        d       |j                  t        d       |j                  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  rf   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r  g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?z%Solving system with option 'cholesky'r  r  r   gV)
r  r
  r  r  r  rf   r  r  r  r  r   r  r   r   )r:   rD   rh   r   r  r  r   r   rD  r   r
   r   r   r5   r   r1   )r   rm   rn   rk   rl   rq   rS   r  r   r2   r3   r-   s               r   test_bug_6690z LinprogCommonTests.test_bug_6690Q  s}   
 xx@ABxx!xx4*-9.
  xx9:MH
  1 	 HH    C

>*JJ>@JJ(NOJJ~'BCJJ}%!T4tV!%dllDC ! %HH G H		J &A,-suu5#%%1!45' ! s   0BF<<Gc                 4   t        d      \  }}}}}t               5 }|j                  t        d       |j                  t        d       |j                  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   -U?r   r   )rT   r   r  r   rD  r   r
   rk   rl   rq   r   r   r5   r   dotr1   r   r:   r?   rW   )r   rm   rn   rS   _r  r   r2   s           r   test_bug_7044z LinprogCommonTests.test_bug_7044}  s    
 +1odAq! CJJ(ABJJ~'BCJJ}%!T4tV!%dllDC	 ! "5."((355::.5suu= ! s   A5DD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)	r7   r   r   r   r   r   r   r   r   )	r   g     g     x@g     8g     Xg      g     }@g      Tg     Pr)	r   g     @g      E@g     H@g      m@g     @g     x@g     hg     L@)	r   g      jg     g     ؀@g     t@g     @g     g     p@g     K@)	r   g     Ȋ@g     ؊g     T@g     |@g     pg     Xg     Љ@g      ~@)	r   g     s@     zg     n@r  g     @h@g     {g      Zg     z)	r   g     @g     8@g     v@g     b@g     ؉g     `@g     ȃ@g     r@)	r  r          r  r  r  r  r  r  )	r  r  r   r  r  r  r  r  r  )	r  r  r  r   r  r  r  r  r  )	r  r  r  r  r   r  r  r  r  )	r  r  r  r  r  r   r  r  r  )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r   r  )	r  r  r  r  r  r  r  r  r   )	r  r   r  r  r  r  r  r  r  )	r  r  r   r  r  r  r  r  r  )	r  r  r  r   r  r  r  r  r  )	r  r  r  r  r   r  r  r  r  )	r  r  r  r  r  r   r  r  r  )	r  r  r  r  r  r  r   r  r  )	r  r  r  r  r  r  r  r   r  )	r  r  r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   )	r  r   r   r   r   r   r   r   r   r   r   rx   r   ghb$[@r  r2   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                 x   t        j                  g dg dg dg dg      }t        j                  |j                  d         }t        j                  |j                  d          }dg|j                  d   z  }t               5 }|j                  t        d       |j                  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   tolg&.>绽|=r   g r  r  )r:   rD   r?   rH   r   r   r  rD  r   r
   rm   rn   r   r   r:  r(   r5   )r   rk   rl   rS   rq   r  r   s          r   test_bug_8174z LinprogCommonTests.test_bug_8174  s     xx00%%	' (
 xx

1&WWTZZ]##DJJqM) CJJ~'BCJJ}%!T4tV!%dllDC ! <<E4(50T[[I5M5c:C-@tL ! s   AD00D9c                 :   t        j                  g d      }t        j                  d       }t        j                  dgdgdgdgdgdgdgg      }t        j                  g dg dg dg dg dg      }t        j                  d	gd
gd
gd
gd
gg      }t               5 }t        r|j                  t               |j                  t        d       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  g?g?r   r   r   r7   )r  r   r   r   r   r   gUUUUUU)r   r  r   r   r   r   )r   r   r  r   r   r   r%  r"  r   r  r   g?E@r   )r:   rD   identityr   r  r  r   r   r
   rq   r   r   r5   r   rS   rk   rl   rm   rn   r  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 C

>*JJ(AB!T4tV!%dllDC	 ! 	)9: ! 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)r{   r   r}         ?r*  )r'         @r*  r         )r   r   r   r+  rf   )r#   r  r'   g      )rv   )r7   g      @r   r,  r   )r+  r   g      r7   g      #@)r   r   r   r   r   )rk   rl   r   r   )r   r   r  gUUUUUU@gUUUUUU#@r[  )r:   rD   r
   r   r   r5   rU  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               5 }t        r|j                  t               |j                  t        d	       |j                  t
               t        |||t        t        || j                  | j                  
      }d d d        |j                  g d       |j                  d       d|d<   t               5 }t        r|j                  t               |j                  t        d	       |j                  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)rz   rc   rw   r#   )rt   r|   r}   rw   )r|   rt   r'   ru   )r}   r'   rt   r}   )r#   ry   ry   rz   )rx   r/  r}   )r   r   r   r   g      B@r  r   )r   r   r7   r   r   r   r   r   )r2   r,   )r   r  r  r   rD  r   r
   rm   rn   r   r   rB   r5   )
r   rS   rk   rl   rq   r2   r  res1res2r,   s
             r   test_bug_8662z LinprogCommonTests.test_bug_8662  s6     " =# C

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

>*JJ~'BCJJ}%1dD$f"&++t||ED ! +DA+DA- !  ! s   A6E5A6F5E>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   rv   ru   r   r   r   g۶m۶m?gI$I$@rQ  )r
   rk   rl   r   r   r5   r_  s         r   test_bug_8663z LinprogCommonTests.test_bug_8663  s]     FByt\*atT4![[$,,@4yfEr   c                 6   dg}dgdgg}ddg}dgdgdgg}g d}t               5 }|j                  t               |j                  t        d       t	        |||||t
        | j                  | j                  	      }d d d        t               y # 1 sw Y   xY w)
Nr'   r   r  r   r|   rx   r#   r   rc   r  r   )	r   r  rD  r   r
   rq   r   r   r!   r'  s           r   test_bug_8664z LinprogCommonTests.test_bug_8664'  s     CaSz1vbTA3 CJJ~&JJ(GH!T4tV!%dllDC !
 	3 ! 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   r7   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rM  rM  r   r   N)r:   rD   r
   rm   rn   r   r   r5   r   r1   r0   rs  s         r   test_bug_8973z LinprogCommonTests.test_bug_89737  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   rQ  N)	r:   r?   rD   r
   rm   rn   r   r   r5   rs  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2H  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   r7   r'   ry   r   rw   r   r   Tr   rc   r   rQ  N)
r:   r?   rD   updater   r
   rm   rn   r   r5   )r   rS   rk   rl   rq   r  r   s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124X  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	               5 }|j                  t        d       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   )      rc         f   r   r   r'   Naxisr  r   )   \   r	  rC  r   rc   rH  rQ  )r:   rD   concatenater?   r   r  r   r
   rk   rl   rq   r   r   r5   )r   rm   rn   rS   r  r   s         r   test_bug_10349z!LinprogCommonTests.test_bug_10349k  s    
 xx++++++- . xx56NNAq"((1+.T: CJJ(AB!T4tV!%dllDC ! 	'@bQ	 ! s   6A
CC"darwinz0Failing on some local macOS builds, see gh-13846reasonc                    g d}g dg dg dg dg dg dg dg d	g d
g dg
}g d}i }| j                   j                  d      sddi}|j                  | j                         t	               5 }|j                  t        d       t        r|j                  t               |j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       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  rO  r  rO  r  r  r  r  r  r  r  r  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  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   ArP  rP  rP  rP  rP  r   	autoscaleTr  r  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...r   Nl )r   r   r=  r   r   r  r   r  r   rD  r   r
   rk   rl   rq   r   r0   )r   rS   rm   rn   r  r  r   s          r   test_bug_10466z!LinprogCommonTests.test_bug_10466~  s    NDDDEDDDDDD	F 
 {{%%g.d#A	 CJJ(GH

>*JJ~'CDJJ~'FGJJ~'@AJJ~'EFJJ}&AB!T4tV!%a9C ! 	- ! s   /C	EE 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   r7   r   r   r   N)r
   r:   asarrayr   r1   )r   rS   rk   rl   r0  r1  res3s          r   test_bug_20584z!LinprogCommonTests.test_bug_20584  s    
 FQyvqt$QFCqt$BJJ1v<NOqt$DATVVTVV$TVVTVV$r   N)W__name__
__module____qualname____doc__r   r   r   r   r   r   r   r  r  r  r&  r0  r=  r?  rI  rK  rO  rR  rV  rY  r\  r`  re  rg  ri  rk  rn  rt  rv  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r(  r-  r2  r4  r7  r9  r;  r>  rJ  r   markskipifsysplatformrS  rW  r~   r   r   r   r   l  s   $8	.@));9 2$O8B'%@%.')R
%F
@F
/;G;GGN   ">%6,,%%
%,%.	 %# A(A(
L92 &C8D*->	..(B"	C" #"D.5>n:,*6X>$'@RM.;0?""BH	F  )"< B&R& [[0!/  1&.1&.P%r   r   zignore::DeprecationWarningc                       e Zd ZdZy)LinprogSimplexTestsr   NrX  rY  rZ  r   r~   r   r   ra  ra    s    Fr   ra  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   rS  zLinprogIPTests.test_bug_10466  s    @Ar   N)rX  rY  rZ  r   rS  r~   r   r   rd  rd    s    FBr   rd  c                   "    e Zd ZdZd Zd Zd Zy)LinprogRSTestsr   c                 .    t        j                  d       y Nz Intermittent failure acceptable.rf  r   s    r   r  zLinprogRSTests.test_bug_5400      67r   c                 .    t        j                  d       y rk  rf  r   s    r   r2  zLinprogRSTests.test_bug_8662  rl  r   c                 .    t        j                  d       y rk  rf  r   s    r   r  z LinprogRSTests.test_network_flow  rl  r   N)rX  rY  rZ  r   r  r2  r  r~   r   r   ri  ri    s    F$888r   ri  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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   ry   r   r   r   r   r   r   r   r   rw   r   )r:   rD   r   NotImplementedErrorr
   r   r5   )r   r   rS   rk   rl   r   s         r   r   zLinprogHiGHSTests.test_callback  sv    	HHb"XAAA')7ADt!$++	7addkkB1a&Ar   r   r   r7   r   r2  r   dual_feasibility_toleranceprimal_feasibility_toleranceipm_optimality_tolerance!simplex_dual_edge_weight_strategyekkic                 j      fd}|j                   j                         t        t        ||       y )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   )r=  r   r   r   )r   r   r  s   `  r   test_invalid_option_valuesz,LinprogHiGHSTests.test_invalid_option_values  s$    	<t||$_a9r   c                     t        d      \  }}}}}d}t        ||||| j                  | j                        }t	        |j
                  dk(  | j                  dk7         y )Nr'   r   r8  r   r~  )rT   r
   r   r   r   crossover_nit)r   rm   rn   rS   r  rq   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover  s[    *1odAq!ad#DKKO 	S&&!+T[[K-GHr   r  c           
         
 t        d      \  
t        
 j                   j                        }j                  \  
 fd}t        |d|j                        }t        |j                  j                  |       
 fd}t        |d|j                        }t        |j                  j                  |       
 fd}t        j                  d	
      5  t        |d|j                        }d|t        j                         <   d d d        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   r<   r  c           	      P    t        | j                        j                  S Nr   r
   r   r0   )r1   rm   rk   rn   rq   rS   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  )r1   rm   rk   rl   rq   rS   r   s    r   f_beqz/LinprogHiGHSTests.test_marginals.<locals>.f_beq  s(    1dD$6"&++//2s3r   c           	          t        j                  | g      j                  }t        |j                        j
                  S r  r:   rD   rh   r
   r   r0   )	r1   rq   rm   rk   rn   rl   rS   r   rp   s	     r   f_lbz.LinprogHiGHSTests.test_marginals.<locals>.f_lb'  s@    XXq"g&((F1dD$f"&++//2s3r   ignore)invalidc           	          t        j                  | g      j                  }t        |j                        j
                  S r  r  )	r1   rq   rm   rk   rn   rl   rS   ro   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ub4  s@    XXr1g&((F1dD$f"&++//2s3r   )rr   r
   r   r   rh   r   r0   r   r  r  r  r:   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubrm   rk   rn   rl   rq   rS   ro   rp   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  )rr   r
   r   r   rh   r  r  r  r  r  r   )	r   rS   rk   rl   rm   rn   rq   r   resids	            r   test_dual_feasibilityz'LinprogHiGHSTests.test_dual_feasibility?  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   )	rr   r
   r   r   r:   allcloser  r  r1   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slacknessM  so    ,;,D)4tT6adDt#DKKO {{3;;00D4#%%<4GH!LLLr   N)rX  rY  rZ  r   r   r\  parametrizer|  r  	fail_slowr  r  r  r~   r   r   rp  rp    s    
B [[Y("o%rl)2.+R0;R@=rB92>BFK 	!:	!:I [[1/4 /4b.	Mr   rp  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.rf  r   s    r   r  z'TestLinprogSimplexDefault.test_bug_5400c      45r   c                 .    t        j                  d       y r  rf  r   s    r   test_bug_7237_low_tolz/TestLinprogSimplexDefault.test_bug_7237_low_tolf  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   r=  r   r   r   superr#  r   	__class__s    r   test_bug_8174_low_tolz/TestLinprogSimplexDefault.test_bug_8174_low_tolk  >     	UEN+\\/*G!# +**   AA)rX  rY  rZ  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_methodu  s    r   c                 .    t        j                  d       y r  rf  r   s    r   r  z%TestLinprogSimplexBland.test_bug_5400x  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   r=  r   r	   r/   r   r   r  r#  r  s    r   r  z-TestLinprogSimplexBland.test_bug_8174_low_tol{  s[     	UEN+]]>*o.%' / +*.. +*s#   A>A2!A>2A;	7A>>B)rX  rY  rZ  r  r  r  r  r  s   @r   r  r  s  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 )Nr2  Fr{  r   s    r   r  z)TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rt   linuxz"Fails with warning on 32-bit linux)	conditionrM  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   r=  r   r	   r/   r  r  r  s    r   test_bug_6139_low_tolz2TestLinprogSimplexNoPresolve.test_bug_6139_low_tol  sB    
 	UEN+]]>1CD7(* EDDs   AAc                 .    t        j                  d       y r  rf  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 presolverf  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:r   c                 .    t        j                  d       y r  rf  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r  r   )rX  rY  rZ  r  r:   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   FrK  z:Fails on some macOS builds for reason not relevant to testrL  c                 "    t         |           y r   r  r  r  s    r   r  z TestLinprogIPDense.test_bug_6139  s    
 	r   )rX  rY  rZ  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rX  rY  rZ  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.rf  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KKLMr   N)rX  rY  rZ  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_posrK  /Fails on macOS x86 Accelerate builds (gh-20510)rL  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               5 }t        r|j                  t               |j                  t
        d       |j                  t        d       | j                  D ci c]  }|| j                  |    }}d|d<   t        |t        t        |||| j                  |      }	d d d        t        	d	       y c c}w # 1 sw Y   xY w)
Nr#   r   zMatrix is exactly singularr  Fr2  r   r  r   )rT   r   r  r  r   r   r   r   r
   rk   rl   r   r5   )
r   rm   rn   rS   r  rq   r  r  r  r   s
             r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve  s    *1odAq! C

>*JJ(*FGJJ(GH37<<@<Cdll3''<A@!AjM!T4tV!%a9C ! 	5 A ! s   AC4C,CCCc                    t        d      \  }}}}}t               5 }|j                  t        d       |j                  t        d       | j                  D ci c]  }|| j                  |    }}d}|D ]=  }	|	|d<   t        |t        t        ||t        | j                  |      }
t        |
d       ? 	 d d d        y c c}w # 1 sw Y   y xY w)	Nr#   r  zInvalid permc_spec option)NATURALMMD_ATAMMD_AT_PLUS_ACOLAMDr   
permc_specr   r  r   )rT   r   r  r   r   r
   rk   rl   rq   r   r5   )r   rm   rn   rS   r  r  r  r  permc_specsr  r   s              r   test_sparse_solve_optionsz-TestLinprogIPSparse.test_sparse_solve_options  s    *1odAq! CJJ(ABJJ(CD37<<@<Cdll3''<A@7K *
",,atT4%)[[!==	 * !  A ! s   ;CB>.AC>CC)rX  rY  rZ  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  rK  r  rL  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=Falserf  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibility  s    LMr   r  c                 "    t         |           y r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6690  r  r   )rX  rY  rZ  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  rd   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r*   )has_cholmodr  ra   r
   r   r   r0   )r   r   rQ   rR   rS   r0  r1  s          r   test_solver_selectz(TestLinprogIPSpecific.test_solver_select  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 )Nr7   r  FT)r2  r   rC  r   )r
   r   r5   rN  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 )Nrd   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_cholesky3  s<    2r"1aaaa)4027r   c           
      :   t        dd      \  }}}t               5 }|j                  t        d       |j                  t        d       |j                  t
        d       t        |||| j                  ddd      }d d d        t        d	       y # 1 sw Y   xY w)
Nrd   r  r  rR  T)ipr   r   r   r   )	ra   r   r  rD  r   r   r
   r   r5   )r   rQ   rR   rS   r  r   s         r   test_alternate_initial_pointz2TestLinprogIPSpecific.test_alternate_initial_point:  s    2r"1a CJJ~'CDJJ(GHJJ}&AB!!!DKK)-t"<>C	 ! 	7 ! s   A BBc                 >   dg}dgdgg}ddg}dgdgdgg}g d}t               5 }|j                  t               |j                  t        d       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|   rx   r6  r  r2  Fr   r   )	r   r  rD  r   r
   rq   r   r   r   r'  s           r   r7  z#TestLinprogIPSpecific.test_bug_8664F  s    CaSz1vbTA3 CJJ~&JJ(GH!T4tV!%z56IKC !
 	CKK!?@ ! s   ABBN)	rX  rY  rZ  r   r  r  r  r  r7  r~   r   r   r  r    s!    F0-8
8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 rk  rf  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland]  rl  r   c                     t               \  }}}}}}}t        |||||t        | j                  | j                  |	      }t        |||       t        |j                  d       y Nr   r   x0r   r   r   r
   rq   r   r   r5   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   r5   r   r   
r   rS   rk   rl   rm   rn   r   r   rq   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesg  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   r
  r  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variableso  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   r  r   r  r  r   r   )	r   r:   rD   r
   r   r   r5   r   r   r  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablew  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#   rf   r  rw   r   r
   rq   r   r   r   r   
r   rS   rk   rl   rm   rn   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        d      \  }}}}}t        j                  j                  |j                   }t               5 }|j                  t        d       |j                  t        d       |j                  t               t        |||| j                        }t        |||| j                  |j                        }t        ||z   ||| j                  |j                        }	d d d        t        d       t        |j                  d       t        	       t!        |	j                  j                  k         y # 1 sw Y   ZxY w)	Nr#   r  r  )rm   rn   r   )rm   rn   r   r  r  r   r   )rT   r:   r;   rG   rH   r   r  r   rD  r   r
   r   r1   r5   r   r   r   )
r   rQ   rR   rS   r  r  r  r   r1  rV  s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  s    $Q1aAIINNAGG$ CJJ(ABJJ~'BCJJ}%!!!DKK@C111T[[SUUKD1q5qqOD ! 	+6TXXq!377"# ! s   B&EE
N)rX  rY  rZ  r   r  r  r  r  r  r  r  r~   r   r   r   r   Z  s*    G8!!!	!$$r   r   c                       e Zd ZddiZy)TestLinprogRSBlandpivotr  Nr  r~   r   r   r  r    s     Gr   r  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.
        )rk   rl   rq   r   r   r   Ngưr  )r   r
   r   r   r   r   r   r1   r:   allr   rg   )r   rS   rk   rl   r   r   ro   rp   s           r   test_lad_regressionz/TestLinprogHiGHSSimplexDual.test_lad_regression  s    124tadd![[$,,@SZZ#T!"syy5()*suu/3!5/3VR ,.:2!=/3!5 5 6 	7suu/3!5/3VR -/J"&&BI!E/3!5 5 6 	7!5!5s   1D2"D8N)rX  rY  rZ  r   r   r#  r~   r   r   r   r     s    FG7r   r   c                       e Zd ZdZi Zy)TestLinprogHiGHSIPMr~  N)rX  rY  rZ  r   r   r~   r   r   r%  r%    s    FGr   r%  c                      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$                  ej                  j'                  d      d               Zej                  j*                  d        Zd Zy)TestLinprogHiGHSMIPr   r  l        LinuxFzgh-16347)r  runrM  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   rS   rm   rn   rq   r   r   r   rE  r7   r  r  )rT   r   r
   r   rC   r1   r>   r:   rd  r  r   diaground)r   rI   rQ   rR   rS   rK   rJ   rq   r   r   ssquares               r   	test_mip1zTestLinprogHiGHSMIP.test_mip1  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|   rc   r7      r   r   r
  ry   )r:   rD   rg   r   	ones_liker
   r   r  r   r1   r0   r  s          r   	test_mip2zTestLinprogHiGHSMIP.test_mip2  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 )	Nr7   r   r#   r   r  r   r
  r   )r:   rD   rg   r   r
   r   r  r   r0   r  r1   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 )Nr7   r   r}   r   r   )rq  ird   rt   r   r
  g      @r{   ;   )
r:   rD   rg   r   r
   r   r  r   r1   r0   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4
	  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  r{   )r'   r   r   r	  )ry   r   r7   r   r   r5  )rS   rk   rl   rm   rn   rq   r   r   )r   rw   r   imip_node_countmip_dual_boundmip_gap)
r:   rD   rg   r
   r   r  r   r1   r0   r:  )	r   rk   rl   rm   rn   rS   rq   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   x   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   r2     r     r#   rq  rC  '   r  rB     rC           r  rq        rH  &   rC  rC  )   rC  rG  r  r  rN  r  rC  i  i(  i:,  i/  r   rc   r2     r{   r  r{   r#   r   rt   r   r+  i>  )r:   rD   rg   r
   r   r  r   r0   )r   rm   rn   rS   rq   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip62	  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 )NrA  rE  rK  rO  rQ  rR  r   rt   r   )rf   g      ?g{Gz?gMbP?mip_rel_gap)	rS   rk   rl   rm   rn   rq   r   r   r   r=  )r:   rD   rg   r
   rk   rl   r   rB   diffflipr"  )r   rm   rn   rS   rq   r   mip_rel_gapssol_mip_gapsrV  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdownF	  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   r7   r7   rf   r*  )r   r#   r   r#   r   )rq   r   r   )r   r   r*  r   r   )r:   rD   r
   r  r   r1   r   )r   rS   rq   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuousl	  s    
 HH%&C:SzC:SzJKhh|,a"-g? 	

""355.9zzQr   N)rX  rY  rZ  r   r   r   r\  r  r  r^  maxsizer_  systemr0  r4  r6  r9  r>  slowtimeoutrT  xslowr]  r_  r~   r   r   r'  r'    s    FG[[1[[#++"7 #4&x(G3 (  *G	* 
G*0&H"0 40 [[[[2  2$ [[#* #*Jr   r'  c                   \    e Zd ZddiZej
                  Zej                  Zej                  Zy)AutoscaleTestsrQ  TN)rX  rY  rZ  r   r   r  r  r  r~   r   r   rf  rf  	  s-    D!G&44M&44M&44Mr   rf  c                       e Zd ZdZd Zy)TestAutoscaleIPr   c                 J    d| j                   d<   t        j                  |       S )Nr"  r!  )r   rf  r  r   s    r   r  zTestAutoscaleIP.test_bug_6139	  s!    #U++D11r   N)rX  rY  rZ  r   r  r~   r   r   rh  rh  	  s    F2r   rh  c                       e Zd ZdZy)TestAutoscaleSimplexr   Nrb  r~   r   r   rk  rk  	  s    Fr   rk  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   r  z2TestAutoscaleRS.test_nontrivial_problem_with_guess	  r  r   c                     t               \  }}}}}}}g d}t        |||||t        | j                  | j                  |	      }	t        |	j                  d       y r  r  r  s
             r   r  z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guess	  r  r   N)rX  rY  rZ  r   r  r  r~   r   r   rm  rm  	  s    F!$r   rm  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)rX  rY  rZ  r   r   LCTr  test_RR_infeasibilityrJ  r  r  	test_NFLCr  r~   r   r   rq  rq  	  sE    F
CDD''N%%M66I11r   rq  c                       e Zd ZddiZy)	TestRRSVDr   SVDNr  r~   r   r   rv  rv  	  s    E"Gr   rv  c                       e Zd ZddiZy)TestRRPivotr   r  Nr  r~   r   r   ry  ry  	  s    G$Gr   ry  c                       e Zd ZddiZy)TestRRIDr   IDNr  r~   r   r   r{  r{  	  s    D!Gr   r{  )NN:0yE>r}  )r   )r   rt   rx   r"  )Wr[  r^  r_  numpyr:   numpy.testingr   r   r   r   r   r   r   r	   r   scipy.optimizer
   r   scipy.optimize._numdiffr   scipy.sparse.linalgr   scipy.linalgr   scipy._lib._utilr   scipy.sparser   r  scikits.umfpackr   ImportErrorr  sksparsesksparse.cholmodr   cholmodr   r!   r$   r(   r5   rT   ra   rr   r   r   r   r   r   r   r   r   rk   rl   rm   rn   rq   r   r\  filterwarningsra  rd  ri  rp  r  r  r  r  r  r  r  r  r  r   r  r   r%  r'  rf  rh  rk  rm  rq  rv  ry  r{  r~   r   r   <module>r     s     O O * 3 5 1 & 6  . 4
LFEK 6:$(.(?D6- 5 F4>9>%*#ZE 	I% I%b* 89,  : 89B' B :B 898' 8 :8:nM* nMl$ 3 $*(1 ("%;#6 %;Z	  	  5^ 5 N^ N3>. 3>l .  , 89<A <A :<AH<$. <$~! !7"3 78+ q qr 895 5 :52n 2> $n $. 892 2 :2# #%' %"w "WM  K  Ks$   I? 
J ?J
	J
JJ