
    e!h                       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/ej`                  jb                  d        Z2d Z3ej`                  jb                  d        Z4d Z5d Z6dZ7dZ8dZ9dZ:dZ; G d d      Z<ej`                  j{                  d        G d! d"e<             Z>ej`                  j{                  d        G d# d$e<             Z?ej`                  j{                  d        G d% d&e<             Z@ G d' d(e<      ZA G d) d*e>      ZB G d+ d,e>      ZC G d- d.e>      ZD G d/ d0e?      ZEe r G d1 d2e?      ZFer G d3 d4e?      ZG G d5 d6e?      ZH G d7 d8e?      ZIej`                  j{                  d        G d9 d:             ZJ G d; d<e@      ZK G d= d>e@      ZL G d? d@eA      ZM G dA dBeA      ZN G dC dD      ZOej`                  j{                  d        G dE dF             ZP G dG dHeP      ZQ G dI dJeP      ZR G dK dLeP      ZSej`                  j{                  d        G dM dN             ZT G dO dPeT      ZU G dQ dReT      ZV G dS dTeT      ZWy# e$ r dZY ew xY w# e$ r dZ Y fw 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     i/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reachedr   !   s8    O;<CKK'!#NOQ JK    c                 `    t        | j                   d       t        | j                  dd       y )Nincorrectly reported success   z"failed to report infeasible statusr   r   s    r   _assert_infeasibler!   '   s$    O;<Q DEr   c                 `    t        | j                   d       t        | j                  dd       y )Nr      z!failed to report unbounded statusr   r    s    r   _assert_unboundedr$   -   s$    O;<Q CDr   c                 b    t        | j                   d       t        | j                  dv d       y )Nr   r      z%failed to report optimization failure)r   r   r   r    s    r   )_assert_unable_to_find_basic_feasible_solr(   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              }|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RandomStatearangereshapezerosrangecopyappendflattenarrayvstackfloatrandshape)nrngMnumbersr?   A_listb_listiA_rowjAbcs                r   magic_squarerU   Q   s    ))


"C	QTAXAii1oA%)GooadAq)GHHadAq\"EFF 1a4[ 

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

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

 Aq)aAgemmo&a	 JJLE#*1eAha+@#AE!U1XuQx
 
MM%--/"
MM!JJLE58U2rAvr223 
!U1XuR!a,
,-
MM%--/"
MM!
6"%0A
u%AAaGQr   c                 H   t         j                  j                  d      }|j                  | |f       }t        j                  | | |z  f      }t        j                  |       }t        |       D ]  }|dz   }d||||z  ||z  f<   || z  ||<     t        j                  || |z  f      }t        j                  |      }	t        |      D ]  }|dz   }d|||d|f<   d|	|<    t        j                  ||f      }
t        j                  ||	f      }|
||j                         fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    r   sizer   N)	r:   r;   r<   exponentialr?   r@   rE   hstackravel)mrI   rJ   rT   ArowbrowrQ   j1AcolbcolrR   rS   s               r   lpgen_2drb      s*   
 ))


"C
//1v/
&&A88QAJD88A;D1X U !QAb1f_a%Q
 88QAJD88A;D1X UQ1WQ
 			4,A
		4,Aa?r   c                 D   t         j                  j                  |       }d\  }}}|j                  |      dz
  }|j                  ||      dz
  }|j                  |      dz
  }|j                  ||      dz
  }|j                  |      dz
  }	|j                  |       }
|j                  |      }t         j                   |
|
|j                          k  <   t         j                  |||j                         kD  <   t        j
                  |
|f      j                  }|||||	|fS )N)
      2         ?)r:   r;   r<   rG   infrE   T)seedrJ   m_eqm_ubrI   rT   A_ubb_ubA_eqb_eqlbubboundss                r   very_random_genrt      s    
))


%CMD$CA88D!S D88D>#D88D!S D88D>#D
((1+B	!BFF7BrSXXZK&&BrCHHJ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'   )rx      	   )r   r7   r   )rd   rx      )ry   r7   r#   r'   )r{   ry   rw   ry   )r|   r   r   )gk椀?gs?r   gkL?gqY:^@ )rT   rm   rn   ro   rp   x_starf_stars          r   nontrivial_problemr      sO    AD DD4D5FFdD$ff44r   c                    t         j                  j                  |       }|j                  dd||f      }|j	                  |      }|j                  dd||f      }|||z  z  |j                  dd|      z   }t        j
                  ||z         }	d|	d| t        j                  j                  d|z  ||z   f      }
d}t        |      D ]J  }||dd|f   z  |
|d|f<   d|
|||z   f<   d|z  |dd|f   z  |
|dz   d|f<   d|
|dz   ||z   f<   |dz  }L |
j                         }
t        j                  d|z        }||ddd<   | |ddd<   dg|z  d	g|z  z   }|	|
||fS )
z
    Training data is {(x0, y0), (x1, y2), ..., (xn-1, yn-1)}
        x in R^d
        y in R
    n: number of training samples
    d: dimension of x, i.e. x in R^d
    phi: feature map R^d -> R^m
    m: dimension of feature space
    r   r   rW   h㈵>Nr   r7   NNr   N)r:   r;   r<   normalrandnonesscipysparse
lil_matrixr@   tocscr?   )rj   r\   drI   rJ   phiw_truer1   yrT   rm   idxiirn   bndss                  r   l1_regression_probr      s    ))


%C
**QA*
'CYYq\F

1aq!f
%A#'SZZ4aZ88A 	!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   r{   r   r   r   rd   rv   r'   rm   rn   callbackmethod      2ry   r2   r3   r0   r1   r   r   )r:   rD   r
   r   r5   r   )selfr   rT   rm   rn   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)Nr{   r   r   r   r   r   ekki-ekki-ekkirm   rn   r   z
highs-ekkiz>Unrecognized options detected: {'rr_method': 'ekki-ekki-ekki'}match	rr_methodrm   rn   options)r:   rD   assert_raises
ValueErrorr
   pytestwarnsr   )rT   rm   rn   r.   s       r    test_unknown_solvers_and_optionsr     s    
"bAFQFQF#DD*g$T2BD*g$T,@NG	oW	5 94$&67	99 9 9s   6BBc                      t        j                  ddg      } ddgddgddgg}g d}t        | ||d      }t        |d	dd
g       y )Nr{   r   r   r   r   r   highsr   r   ry   r   )r:   rD   r
   r5   )rT   rm   rn   r   s       r   test_choose_solverr     sQ    
"bAFQFQF#DD
!T4
0CCUq!f=r   c                  f   t        j                  t              5  t        dd       d d d        t        j                  t              5  t        dd       d d d        t        j                  t              5  t        dd       d d d        y # 1 sw Y   hxY w# 1 sw Y   ExY w# 1 sw Y   y xY w)Nr   interior-pointr   revised simplexsimplex)r   r   DeprecationWarningr
   r   r   r   test_deprecationr   (  s    	(	) ,*+,	(	) -+,-	(	) %)$% %	, ,- -% %s#   B	B8B'BB$'B0c            	         t        dd      } d}| j                  dk(  sJ | j                  j                  |      sJ t	        d      \  }}}}}dgt        |      z  }dgt        |      z  }dd	i}	t        ||||d|	|
      } d}| j                  dk(  sJ | j                  j                  |      sJ ddi}	t        ||||d|	      } d}| j                  dk(  sJ | j                  j                  |      sJ t        ddd      } d}| j                  dk(  sJ | j                  j                  |      sJ t        dd      } d}| j                  dk(  sJ | j                  j                  |      sJ ddlm}
  |
dd      \  }}d}|dk(  sJ |j                  |      sJ  |
d d       \  }}d}|dk(  sJ |j                  |      sJ y )Nr   r   r   z6Optimization terminated successfully. (HiGHS Status 7:r   ry   r   r   
time_limit皙?)rT   ro   rp   rs   r   r   integralityz%Time limit reached. (HiGHS Status 13:r   rd   highs-dsrT   ro   rp   rs   r   r   z*Iteration limit reached. (HiGHS Status 14:)r   r7   )rs   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.   
startswithrU   lenscipy.optimize._linprog_highsr   )r   r4   rR   rS   rT   rL   rK   rs   r   r   r   r   r.   s                r   test_highs_status_messager   2  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         rm   rn   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
ej                  j                  d	        Zej                  j                  d
        Zd Zd Zd Zd Zd Zej                  j                  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, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRej                  j                  eTj                  dNk(  dOP      dQ        ZVyR)SLinprogCommonTestsa  
    Base class for `linprog` tests. Generally, each test will be performed
    once for every derived class of LinprogCommonTests, each of which will
    typically change self.options and/or self.method. Effectively, these tests
    are run for many combination of method (simplex, revised simplex, and
    interior point) and options (such as pivoting rule or sparse treatment).
    c                     t        |        y N)r   r   s    r   test_callbackz LinprogCommonTests.test_callback{  s
    d#r   c                 v    t        dd      \  }}}t        |||| j                  ddi      }t        |d       y )Nre   dispTrm   rn   r   r   T*Pr2   rb   r
   r   r5   r   rR   rS   rT   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'   r{   r   r   ry   r   r{   N)rm   rn   rs   r   r   r   )r
   r   r   r5   )r   rT   rR   rS   	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ro   rp   r   r   )r   	TypeErrorr
   r   r   )r   rT   ro   rp   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   rh   r
   ro   rp   r   r   r5   r   )r   rT   rm   	b_ub_origrn   rs   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   rh   r
   rm   rn   r   r   r5   r   )r   rT   ro   	b_eq_origrp   rs   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   rT   rm   rn   ro   rp   rs   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 fd	} j                  D ci c]  }| j                  |    }}d|d	<   t        t        |||||
       y c c}w )Nr{   r   r   r   r   r   c           
      @    t        | |||||j                  |       y Nr   r
   r   )rT   rm   rn   ro   rp   rs   r   r   s          r   fz2LinprogCommonTests.test_unknown_options.<locals>.f  s     AtT4v;;9r   *   spamr   )NNNNNN)r:   rD   r   r   r   )r   rT   rm   rn   r  keyos   `      r   test_unknown_optionsz'LinprogCommonTests.test_unknown_options  s    HHb"XAAA',0.2	9
 04||<S$,,s##<<&	_aTa	9 =s   A2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   rT   rm   rn   rs   r   r   ?ffffff@ffffff)r:   rD   rh   r   testingr   r   r
   r   r   r1   r0   r   rm   rn   rT   rs   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 	GADtF!%+GC	G 	

""3553*5


""377D1	G 	Gs   DD#c                     d fd	}t        t        |g dddg       t        j                  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   rT   rm   rn   ro   rp   rs   r   s         r   r  z1LinprogCommonTests.test_invalid_inputs.<locals>.f  $    AtT4v;;>r   r   r   r#   r   r#   r'   rs   zCreating an ndarray from ragged)r   r  )r#   r'      r   r   r   r   )rm   rn   )ro   rp   _sparse_presolve)r   r   r#   )rm   rp   NNNNN)	r   r   r:   r  r   filterr   r   r?   )r   r  sups   `  r   test_invalid_inputsz&LinprogCommonTests.test_invalid_inputs  sA   	>
 	j!Y7GHZZ))+ 	XsJJ02ST*a;VW	X 	j!Y7HI 	j!aVAq6(!QHj!aVA3%qcBj!aVAq6(!QHj!aVA3%qcBj!aV1#A> $,,./0 	j!aV"((92EAN%	X 	Xs   .EEc           	          d fd	}t         j                  j                  d      }d}d}t        j                  j                  ||d      }|j                  |      }|j                  |      }||j                  |      z   }||j                  |      z
  }	t        j                  |	|f      }
||z  } j                  dv rNt        t        d j                   d	      5  t        ||||
 j                   j                  
       d d d        y i  j                  } j                  dv rd|d<   t        ||||
 j                  |
      }|j                  sJ y # 1 sw Y   y xY w)Nc           
      T    t        | |||||j                  j                         y r  r  r  s         r   r  z5LinprogCommonTests.test_sparse_constraints.<locals>.f  r  r   r   d      rg   >   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  rJ   r\   rI   ro   x_validrT   rr   rq   rs   rp   r   r   s   `             r   test_sparse_constraintsz*LinprogCommonTests.test_sparse_constraints  sS   	> ii##A&||  As+))A,IIaLsxx{"sxx{""b*g~;;88z8DKK= IN 2N O B!$T&#{{DLLBB B '&G{{00$(!ADtF!%g?C;;;B Bs   &EE"c                     g d}g dg dg dg}g d}t         j                  j                  d       d}t        |||| j                  d|i	      }t        ||       t        |j                  |       y )
Nr'   rv   r#   r   r   r   r   r  r#   r7   r   r   r#         @rv   r   r7   r   rv   rd   r'   r   r   r7         iX  r   r#   r   r   )r:   r;   rj   r
   r   r   r   r   )r   rT   rR   rS   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   rs   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   rd   )      @r9  ro   rp   rs   r   r      )r   r}   r9  )r   getr
   r   r5   r   r   r   do_presolver   s      r   test_bounds_fixedz$LinprogCommonTests.test_bounds_fixed1  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 )	Nr4  Tr   r  r5  r   r  ))r  r   r   r  )r   r<  r
   r   r!   r   r   r=  s      r   test_bounds_infeasiblez)LinprogCommonTests.test_bounds_infeasibleQ  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)Nr4  Tr   r  r   r  c                 N    t        | |j                  j                        }|S )Nr5  r  )rT   rs   r   r   s      r   gz6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gz  s$    a%)[[$,,H
r   r  rT   rs   r   r   r   )r   r<  r   r:   rh   r   r   RuntimeWarningr	   
IndexErrorr
   r!   r   r   )r   r>  simplex_without_presolverT   bounds_1bounds_2rD  r   s   `       r   test_bounds_infeasible_2z+LinprogCommonTests.test_bounds_infeasible_2h  s    ll&&z48'2?#Ot{{i7O RVVRVV,f5bffWrvvg.7#
 n- *]]:. *a)** n- *]]:. *a)** * Ah!%dllDCs#SWWa(Ah!%dllDCs#SWWa( * ** *
* ** *sH   F<8F0F<,GGG0F9	5F<<GG	GGc                 f    ddg}t        || j                  | j                        }t        |       y )Nr7   r   r   )r
   r   r   r$   )r   rT   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   r5  r4  T)	r:   rh   r
   r   r   r$   r<  r   r   r   rT   rs   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   rO  r5  )r   r   r7   r   r   r3   r2   )r:   rh   r
   r   r   r5   rP  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   iry   r   	r:   rD   r
   ro   rp   rs   r   r   r5   r   rT   rm   rn   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 )Nry   r#   r   r7   r   r   )r   r7   r7   r   r  gUUUUUU?gUUUUUU?r   r
   ro   rp   rs   r   r   r5   rW  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
   rm   rn   ro   rp   r   r   r5   rP  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
   rm   rn   r   r   r5   r   rT   ro   rp   rs   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  rg   r   rS  r:   r   eyerD   rh   r
   rm   rn   r   r   r5   sumra  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`  ra  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   rS  rd  ra  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   rS  rd  ra  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'   r{   r   r   r8   ry   r   gm۶m&g$I$Ig%I$I@r   )
r:   rD   float64rh   r
   ro   rp   r   r   r5   )r   rT   rm   rn   r   r   rs   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
   ro   rp   r   r   r!   r   rT   rm   rn   rs   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 rr  )r
   rm   rn   r   r   r!   ra  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'   rv   r   rt  Fr4  r   )r   r
   ro   rp   r   r!   )r   rT   rm   rn   rs   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           
      N   d\  }}t         j                  j                  d      }|j                  |      }d|d<   |j                  ||      }d|d d df<   |j                  |      }g dg}d}g d}	t	        ||||||	| j
                  | j                        }
t        |
d	       y )
Nr  r   r   )r   r   r   r   r#   )r|   rd   r|  )r|   Nr   r   gyMj#r   )r:   r;   r<   rG   r
   r   r   r5   )r   r\   rI   rJ   rT   ro   rp   rm   rn   rs   r   s              r   test_zero_column_1z%LinprogCommonTests.test_zero_column_1+  s    1ii##A&HHQK!xx1~QT
xx{~BatT4![[$,,@)<=r   c           
      X   | j                   dv rt        j                          t        j                  j                  d      }d\  }}|j                  |      }d|d<   |j                  ||      }d|d d df<   |j                  |      }|j                  ||      }d|d d df<   |j                  |      }d}	t        ||||||	| j                   | j                        }
t        |
       | j                  j                  dd	      r&d
| j                   vrt        |
j                  d       y y y )N>   r   	highs-ipmr   r&   r7   r   r   r   r4  Tr   )r   r   xfailr:   r;   r<   rG   r
   r   r$   r<  r   r   )r   rJ   r\   rI   rT   ro   rp   rm   rn   rs   r   s              r   test_zero_column_2z%LinprogCommonTests.test_zero_column_2:  s   ;;33LLNii##A&1HHQK!xx1~QT
xx{xx1~QT
xx{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
   rm   rn   rs   r   r   r5   r   rT   ro   rp   r   s        r   test_zero_row_1z"LinprogCommonTests.test_zero_row_1U  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   rZ  )r   rm   rn   rT   r   s        r   test_zero_row_2z"LinprogCommonTests.test_zero_row_2]  sF    9i0atT4![[$,,@+r   c           
         d\  }}t         j                  j                  d      }|j                  |      }|j                  ||      }d|dd d f<   |j                  |      }t	        |t
        t        ||t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y Nr&   i  r   r   r4  T)r:   r;   r<   rG   r
   rm   rn   rs   r   r   r!   r<  r   r   )r   r\   rI   rJ   rT   ro   rp   r   s           r   test_zero_row_3z"LinprogCommonTests.test_zero_row_3e  s    1ii##D)HHQKxx1~QT
xx{atT4![[$,,@3 <<J-!$ .r   c           
         d\  }}t         j                  j                  d      }|j                  |      }|j                  ||      }d|dd d f<   |j                  |       }t	        |||t
        t        t        | j                  | j                        }t        |       | j                  j                  dd      rt        |j                  d       y y r  )r:   r;   r<   rG   r
   ro   rp   rs   r   r   r!   r<  r   r   )r   r\   rI   rJ   rT   rm   rn   r   s           r   test_zero_row_4z"LinprogCommonTests.test_zero_row_4t  s    1ii##D)HHQKxx1~QT
|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   r4  Tr   )
r
   rm   rn   rs   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   r4  Tr   	r
   ro   rp   r   r   r!   r<  r   r   ru  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   rg   r   )r
   ro   rp   r   r   r5   ru  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   r8  r   )r
   ro   rp   rs   r   r   r!   rW  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  ry   r   r4  Tr   r  ru  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
   ro   rp   rs   r   r   r$   rW  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   Fr4  rE  r   r  )r   r
   r   r   r   r$   )r   rT   rs   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   rO  rO  r   r   r   r7   N$   $The problem is (trivially) unboundedr:   rD   r
   ro   rp   r   r   r$   lowerr   r   r1   rh   r.   ru  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   rO  rO  )Nr   r   r   r7   Nr  r  r  ru  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$  rd   r   r7   r6  )re   r   r   )   re   r   )r   r$  '  r   )r   r   r  gh㈵>Hz>)r3   r-   r,   rV  rW  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)r|   9   rz   g      8@)rg   g      r   rz   )rg   g      r  r   r  )r   r   r   r$  r   r   r   bland)r   r   r   r   r]  )r:   rD   r   itemsr
   ro   rp   rs   r   r<  r   r5   )	r   rT   rm   rn   r   r  valr  r   s	            r   test_cyclic_blandz$LinprogCommonTests.test_cyclic_bland  s    HH&'xx--%' (  &*ll&8&8&:;(#sS#X;;)atT4![[!5 ;;)#DLL,<,<W,E+C9> C<8 <s   C!c                    d\  }}t         j                  j                  d      }|j                  |      }|j                  ||      }|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)rd   rd   r   r   r   r7   A_eq does not appear...r   )r:   r;   r<   rG   r   r  r   r
   rm   rn   rs   r   r   r!   )	r   r\   rI   rJ   rT   ro   rp   r   r   s	            r   $test_remove_redundancy_infeasibilityz7LinprogCommonTests.test_remove_redundancy_infeasibility,  s     1ii##A&HHQKxx1~xx{$r1u+oRURB  	DCJJ(AB!T4tV!%dllDC	D 	3		D 	Ds   A
C!!C*c           
          t               \  }}}}}}}t        |||||t        | j                  | j                        }t        |||       y )Nr   r   )r   r
   rs   r   r   r5   	r   rT   rm   rn   ro   rp   r   r   r   s	            r   test_nontrivial_problemz*LinprogCommonTests.test_nontrivial_problem@  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)Nre   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rb   r   r  r   rF  r   r
   ro   rp   rs   r   r   r5   )r   rm   rn   rT   r   r   s         r   test_lpgen_problemz%LinprogCommonTests.test_lpgen_problemH  s     !R(dA  	DCJJ(NOJJ~'BCJJ}%!T4tV!%dllDC		D 	7	D 	D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'   rz      r'   r#   rv   r}   r   r;        rO  r   )r      i!   r   r   ir   i  ư>r  )r2   r-   r,   )
r   r  r   r
   rm   rn   rs   r   r   r5   )r   rT   rI   pro   rp   r   r   s           r   test_network_flowz$LinprogCommonTests.test_network_flowU  sE    511aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a01aAq!Q1a02 +  	DCJJ}%!T4tV!%dllDC	D 	4dC		D 	D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  rO  )r   r   r   r'   scipy.linalg.solve
Ill...r  Solving system with option...r   rs  r   )r   has_umfpackr  r   rF  r   r   r
   rm   rn   r   r   r5   )	r   rT   rs   rI   r  ro   rp   r   r   s	            r   "test_network_flow_limited_capacityz5LinprogCommonTests.test_network_flow_limited_capacityj  s    FFFFF 11aO1aO1aO1aO	
   		DC

>*JJ~'CDJJ(ABJJ(GHJJ}%!T4tV!%dllDC		D 	,		D 		D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   r{   r   )r#   r   r   )r   r  r#   rd   r;  r   ir   rZ  rW  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
   rm   rn   rs   r   r   r5   )r   rT   ro   rp   r   r   s         r   test_enzo_example_bz&LinprogCommonTests.test_enzo_example_b  s    /%""""	$
 *  	DCJJ(AB!T4tV!%dllDC	D 	"@	B		D 	Ds   A
BBc           
         d}t        j                  |       }dt         j                  z  t        j                  d|dz         z  |dz   z  }t        j                  t        j
                  |      dz
  t        j                  |      f      }ddg}t        |t        t        ||t        | j                  | j                        }t        |dt        j                  |             y )Nre   r   r   r   r   r   )r:   r   pir=   rE   cossinr
   rm   rn   rs   r   r   r5   r?   )r   r\   rT   tmpro   rp   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 )Nrf   r   r   r  r   r   )r:   r   r  r=   r  r  rE   r
   rm   rn   rs   r   r   r$   )	r   r\   rT   r  row0row1ro   rp   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 )Nrf   r   r   Fr4  r   )r:   r   r  r=   rE   r  r  r   r
   rm   rn   rs   r   r!   )	r   r\   rT   r  ro   rp   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
   rs   r   r   r5   
zeros_like)r   rT   rm   rn   ro   rp   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   rm   rn   ro   rp   rs   r   r   r   z%Optimization terminated successfully.gdy=r-   )eqlinineqlinr  upper	marginalsresidual)rt   r
   r   r   r   r   r   r   r.   r   r1   r0   r   r   keysr   r:   ndarray)	r   rT   rm   rn   ro   rp   rs   r   r  s	            r   test_optimize_resultz'LinprogCommonTests.test_optimize_result  s*   ,;A,>)4tT6adDt#DKKOCJJ$++%CKK#JJKCEE	377+tcee|+SWW5Atcee|+SYYUC9 	DCchhj !#c(;"7DDD!#c(:"6

CCC	Dr   c           /         g d}d}d}d}t        j                  g dddd|dd	dd
ddd
dd
ddddddgddd|ddd	d
d
dd
d
dddddddgg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dddd
d
dddd
||ddd|dddddgdddddd
d
dddd
||d|ddddgdd
dd ddd|d
d
ddddd|dddgddddd
dd
ddd|d
|ddd|ddgdd
d
d ddd||d
ddddddd|dgddddd
d
dddd||d
ddddd|gg      }t        j                  g d!      }t        j                  g d"      }t               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   r{   r   r   r   r7   r7   r   r7   r7   r   r   r   r   r   r   r   r   g333333r{   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   rF  r   r
   ro   rp   r   r   r5   )
r   rs   r  rD  hrm   rn   rT   r   r   s
             r   test_bug_5400z LinprogCommonTests.test_bug_5400  sa   N xxN4Ar1b!QAr1aAq!L1aAr2r1b"aAq!QJEEEEEEEEEEEEFFFFFFb"aAr1aAq!Q1aK1aBAq!RAq!Q1aHCaAq"b!Q1aAq!L1aQAq!QAq!Q1aHBQ1aB1aAq!QJ1aRAq!Q2q!Q1aH7J K: xx 5 6 HH 4 5  	DCJJ=?JJ~'BCJJ}%!T4tV!%dllDC	D 	)<=	D 	D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   rT   ro   rp   rm   rn   rs   r   s           r   test_bug_6139z LinprogCommonTests.test_bug_6139C  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	  rg   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?r  g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?z%Solving system with option 'cholesky'r  r  r   gV)
r  r  r  r  r	  rg   r  r  r  r  r   r  r   r   )r:   rD   ri   r   r  r  r   r   rF  r   r
   r   r   r5   r   r1   )r   ro   rp   rm   rn   rs   rT   r   r   r2   r3   r-   s               r   test_bug_6690z LinprogCommonTests.test_bug_6690Y  s   
 xx@ABxx!xx4*-9.
  xx9:MH
  1 	 HH     		DC

>*JJ>@JJ(NOJJ~'BCJJ}%!T4tV!%dllDC		D %HH G H		J &A,-suu5#%%1!45'		D 		D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   )rU   r   r  r   rF  r   r
   rm   rn   rs   r   r   r5   r   dotr1   r   r:   r?   rX   )r   ro   rp   rT   _r   r   r2   s           r   test_bug_7044z LinprogCommonTests.test_bug_7044  s    
 +1odAq!  	DCJJ(ABJJ~'BCJJ}%!T4tV!%dllDC		D "5."((355::.5suu=	D 	D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   rz   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  rF  r   r
   ro   rp   r   r   r<  r(   r5   )r   rm   rn   rT   rs   r   r   s          r   test_bug_8174z LinprogCommonTests.test_bug_8174  s    xx00%%	' (
 xx

1&WWTZZ]##DJJqM)  	DCJJ~'BCJJ}%!T4tV!%dllDC	D <<E4(50T[[I5M5c:C-@tL	D 	D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
   rs   r   r   r5   r   rT   rm   rn   ro   rp   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  	DC

>*JJ(AB!T4tV!%dllDC		D 	)9:	D 	Ds   ADDc                    t        j                  g d      }t        j                  g dg dg dg dg dg      }t        j                  g d      }t        |||| j                  | j                        }t        |g d	
       y )N)r}   r   r         ?r+  )r'         @r+  r         )r   r   r   r-  rg   )r#   r  r'   g      )rx   )r7   g      @r   r-  r   )r,  r   g      r7   g      #@)r   r   r   r   r   )rm   rn   r   r   )r   r   r  gUUUUUU@gUUUUUU#@r]  )r:   rD   r
   r   r   r5   rW  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)r|   rd   ry   r#   )rv   r~   r   ry   )r~   rv   r'   rw   )r   r'   rv   r   )r#   r{   r{   r|   )rz   r0  r   )r   r   r   r   g      B@r  r   )r   r   r7   r   r   r   r   r   )r2   r,   )r   r  r  r   rF  r   r
   ro   rp   r   r   rB   r5   )
r   rT   rm   rn   rs   r2   r   res1res2r,   s
             r   test_bug_8662z LinprogCommonTests.test_bug_8662   sL     " =#  	EC

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

>*JJ~'BCJJ}%1dD$f"&++t||ED	E +DA+DA-	E 	E	E 	E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   rx   rw   r   r   r   g۶m۶m?gI$I$@rS  )r
   rm   rn   r   r   r5   ra  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~   rz   r#   r   rd   r  r   )	r   r  rF  r   r
   rs   r   r   r!   r(  s           r   test_bug_8664z LinprogCommonTests.test_bug_8664/  s     CaSz1vbTA3  	DCJJ~&JJ(GH!T4tV!%dllDC	D
 	3	D 	Ds   ABBc           
      \   t        j                  g d      }t        j                  g dg dg      }t        j                  ddg      }g d}t        |||t        t        || j
                  | j                        }t        |d       t        ||j                  z  |j                         y	)
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r7   )r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   rO  rO  r   r   N)r:   rD   r
   ro   rp   r   r   r5   r   r1   r0   ru  s         r   test_bug_8973z LinprogCommonTests.test_bug_8973?  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   rS  N)	r:   r?   rD   r
   ro   rp   r   r   r5   ru  s         r   test_bug_8973_2z"LinprogCommonTests.test_bug_8973_2P  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'   r{   r   ry   r   r   Tr   rd   r   rS  N)
r:   r?   rD   updater   r
   ro   rp   r   r5   )r   rT   rm   rn   rs   r  r   s          r   test_bug_10124z!LinprogCommonTests.test_bug_10124`  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   )      rd         f   r   r   r'   Naxisr  r   )   \   r  rD  r   rd   rI  rS  )r:   rD   concatenater?   r   r  r   r
   rm   rn   rs   r   r   r5   )r   ro   rp   rT   r   r   s         r   test_bug_10349z!LinprogCommonTests.test_bug_10349s  s    
 xx++++++- . xx56NNAq"((1+.T:  	DCJJ(AB!T4tV!%dllDC	D 	'@bQ		D 	D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  rP  r  rP  r  r  r  r  r  r  r  r  )r   r   r  r  r  r  r  r  r  r  r  r  r  )r  r  r   r   r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r   r  r  r  r  r  r  r  )r   r  r   r  r   r  r   r  r  r  r  r  r  )r   r  r   r  r   r  r  r   r  r  r  r  r  )r   r  r  r  r  r  r  r  r   r  r  r  r  )r   r  r  r  r  r  r  r  r  r   r  r  r  )r   r  r   r  r   r  r  r  r  r  r   r  r  )r  r  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   ArQ  rQ  rQ  rQ  rQ  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   rF  r   r
   rm   rn   rs   r   r0   )r   rT   ro   rp   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	  
	9CJJ(GH

>*JJ~'CDJJ~'FGJJ~'@AJJ~'EFJJ}&AB!T4tV!%a9C
	9 	-
	9 
	9s   /C	EE N)W__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   markthread_unsafer  r  r!  r(  r2  r?  rA  rK  rM  rQ  rT  rX  r[  r^  rb  rg  ri  rk  rm  rp  rv  rx  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r)  r.  r3  r5  r8  r:  r<  r?  rK  skipifsysplatformrT  r   r   r   r   r   n  s$   $8	.@)); [[9 9  [[2 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&.r   r   zignore::DeprecationWarningc                       e Zd ZdZy)LinprogSimplexTestsr   NrU  rV  rW  r   r   r   r   r_  r_    s    Fr   r_  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   rT  zLinprogIPTests.test_bug_10466  s    @Ar   N)rU  rV  rW  r   rT  r   r   r   rb  rb    s    FBr   rb  c                   "    e Zd ZdZd Zd Zd Zy)LinprogRSTestsr   c                 .    t        j                  d       y Nz Intermittent failure acceptable.rd  r   s    r   r  zLinprogRSTests.test_bug_5400      67r   c                 .    t        j                  d       y ri  rd  r   s    r   r3  zLinprogRSTests.test_bug_8662  rj  r   c                 .    t        j                  d       y ri  rd  r   s    r   r  z LinprogRSTests.test_network_flow  rj  r   N)rU  rV  rW  r   r  r3  r  r   r   r   rg  rg    s    F$888r   rg  c                   P   e Zd Zd Zej
                  j                  ej
                  j                  dddiddiddiddiddid	did
diddig      d               Zd Z	ej
                  j                  d      d        Zd Zd Zej
                  j                  d      d        Zy)LinprogHiGHSTestsc           	          d }t        j                  ddg      }ddgddgddgg}g d}t        t        t        ||||| j
                         t	        |||| j
                  	      }t        |d
ddg       y )Nc                      y r   r   r    s    r   r   z+LinprogHiGHSTests.test_callback.<locals>.cb  s    r   r{   r   r   r   r   r   r   r   r   ry   r   )r:   rD   r   NotImplementedErrorr
   r   r5   )r   r   rT   rm   rn   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   r4  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   r:  r   r  )rU   r
   r   r   r   crossover_nit)r   ro   rp   rT   r  rs   r   s          r   test_crossoverz LinprogHiGHSTests.test_crossover   s[    *1odAq!ad#DKKO 	S&&!+T[[K-GHr   rd   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   rj   r  c           	      P    t        | j                        j                  S Nr   r
   r   r0   )r1   ro   rm   rp   rs   rT   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   ro   rm   rn   rs   rT   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   ri   r
   r   r0   )	r1   rs   ro   rm   rp   rn   rT   r   rr   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   rs   ro   rm   rp   rn   rT   rq   r   s	     r   f_ubz.LinprogHiGHSTests.test_marginals.<locals>.f_ub/  s@    XXr1g&((F1dD$f"&++//2s3r   )rt   r
   r   r   ri   r   r0   r   r  r  r  r:   errstateisfiniter  r  )r   r   r  dfdbubr  dfdbeqr  dfdlbr  dfdubro   rm   rp   rn   rs   rT   rq   rr   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  )rt   r
   r   r   ri   r  r  r  r  r  r   )	r   rT   rm   rn   ro   rp   rs   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   )	rt   r
   r   r   r:   allcloser  r  r1   r   s           r   test_complementary_slacknessz.LinprogHiGHSTests.test_complementary_slacknessH  so    ,;,D)4tT6adDt#DKKO {{3;;00D4#%%<4GH!LLLr   z&Upstream / Wrapper issue, see gh-20589rM  c                 <   g d}g d}g d}g d}g d}g d}t        j                  |t         j                        }t        j                  |t         j                        }t        j                  |t         j                        }	t        j
                  j                  |||	ffd	      }
t        j                  |t         j                        }t        j                  |t         j                        }t        j                  j                  |d
d
|
||      }|j                  dk(  sJ |j                  }t         j                  j                  |
|z  |z
        }t         j                  j                  |j                  j                        }t        ||       y
)zH
        Test that `linprog` now solves a poorly-scaled problem
        )!)     @g    j/aA)r  Nr  N)r  gS8(U@r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   MbP?MbP<:=r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   r  r  r  r  r   r   )Sr   r   r   r   r   r   r#   r#   r'   r'   r  r  ry   ry   r}   r}   rv   rv   rz   rz   rd   r  r  r  r  r  r     r  rs  rs  rs  rs  r;  r;  r  r  r  r     r  r  r  r  r  r  r  re   re   re   re      r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r     r  r  r     r  )Sr;  rs  r  r  r  r  r  re   r  r  r  r  r  r  r  r  r  r  r  r   r       r#   rs  r  r'   r   r'   r   r  r  r   r  r   r  r  r;  r  r'   r  r'   r  r  ry   r  ry   r  re   r  r}   ry   r}   ry   r  r  rv   r}   rv   r}   r  r  rz   rv   rz   rv   r  r  rd   rz   rd   rz   r  r  r  rd   r  rd   r  r  r  r  r  r  ) r  r  r  r  r  r  r  r  r  r  g    *aAr  gelaz?g?2gZPd%q?g4g̚y?gC1|g֛x?gKcgE3-w?g-.f?`gsF]Fv?g@ʥugbu?gNgжlt?g=ЂgnTs?gQ3og,'* +=r?g)[n)!r  r  r  gl'V3r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8   )r  r  )rH   N)rm   rn   ro   rp   rs   r   )r:   asarrayro  int32r   r   	csr_arrayoptimizer
   r   r1   linalgnormr  r  r   )r   
boundaries
eq_entries
eq_indizeseq_vars	eq_valuescoefficientsnp_eq_entriesnp_eq_indizes
np_eq_varsa_eqrp   rT   resultr1   n_r_xn_rs                    r   test_bug_20336z LinprogHiGHSTests.test_bug_20336S  s>   
	#
9
N

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

:RZZ@

:RXX>ZZrxx8
||%%}mZ5P&Q,4 & 6zz)2::6JJ|2::6''4dQU/9 ( ;}}aHH		tax$/iinnV\\223U#r   N)rU  rV  rW  r   r   rY  rZ  parametrizerz  r}  	fail_slowr  r  r  r  r  r   r   r   rn  rn    s    
B [[[[Y("o%rl)2.+R0;R@=rB92>BFK 	!:	! :I [[2/4 /4b.	M [[FGA$ HA$r   rn  c                   b     e Zd Zd Zd Zd Zej                  j                   fd       Z	 xZ
S )TestLinprogSimplexDefaultc                     i | _         y r   ry  r   s    r   setup_methodz&TestLinprogSimplexDefault.setup_method  s	    r   c                 .    t        j                  d       y NzSimplex fails on this problem.rd  r   s    r   r  z'TestLinprogSimplexDefault.test_bug_5400      45r   c                 .    t        j                  d       y r  rd  r   s    r   test_bug_7237_low_tolz/TestLinprogSimplexDefault.test_bug_7237_low_tol  s     	45r   c                     | j                   j                  ddi       t        j                  t              5  t
        |           d d d        y # 1 sw Y   y xY wNr"  r  r   r>  r   r   r   superr$  r   	__class__s    r   test_bug_8174_low_tolz/TestLinprogSimplexDefault.test_bug_8174_low_tol  G     	UEN+\\/* 	$G!#	$ 	$ 	$   AA)rU  rV  rW  r  r  r  r   rY  rZ  r  __classcell__r  s   @r   r  r    s0    66
 [[$ $r   r  c                   \     e Zd Zd Zd Zej                  j                   fd       Z xZ	S )TestLinprogSimplexBlandc                     ddi| _         y )Nr  Try  r   s    r   r  z$TestLinprogSimplexBland.setup_method  s    r   c                 .    t        j                  d       y r  rd  r   s    r   r  z%TestLinprogSimplexBland.test_bug_5400  r  r   c                    | j                   j                  ddi       t        j                  t              5  t        j
                  t              5  t        | !          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )	r   r>  r   r	   r/   r   r   r  r$  r  s    r   r  z-TestLinprogSimplexBland.test_bug_8174_low_tol  sm     	UEN+]]>* 	(o. (%'(	( 	(( (	( 	(s#   A>A2!A>2A;	7A>>B)
rU  rV  rW  r  r  r   rY  rZ  r  r  r  s   @r   r  r    s+    '6 [[( (r   r  c                   8    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ej                  j$                   fd
       Zd Zd Z xZS )TestLinprogSimplexNoPresolvec                     ddi| _         y )Nr4  Fry  r   s    r   r  z)TestLinprogSimplexNoPresolve.setup_method  s    "E*r   r   rv   linuxz"Fails with warning on 32-bit linux)	conditionrN  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  sJ    
 	UEN+]]>1CD 	+7(*	+ 	+ 	+s   AAc                 .    t        j                  d       y r  rd  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 presolverd  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1      9:r   c                 .    t        j                  d       y r  rd  r   s    r   r  zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2  r  r   )rU  rV  rW  r  r:   intpitemsize	is_32_bitr\  r]  r   is_linuxr   rY  r  r  r  r  rZ  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   FrL  z:Fails on some macOS builds for reason not relevant to testrM  c                 "    t         |           y r   r  r  r  s    r   r  z TestLinprogIPDense.test_bug_6139  s    
 	r   )rU  rV  rW  r   r   rY  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rU  rV  rW  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.rd  r   s    r   r  z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacity  s    KKLMr   N)rU  rV  rW  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_posrL  /Fails on macOS x86 Accelerate builds (gh-20510)rM  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  Fr4  r   r  r   )rU   r   r  r  r   r   r   r   r
   rm   rn   r   r5   )
r   ro   rp   rT   r  rs   r   r  r  r   s
             r   $test_magic_square_sparse_no_presolvez8TestLinprogIPSparse.test_magic_square_sparse_no_presolve  s    *1odAq!  
	9C

>*JJ(*FGJJ(GH37<<@Cdll3''@A@!AjM!T4tV!%a9C
	9 	5 A
	9 
	9s   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   )rU   r   r  r   r   r
   rm   rn   rs   r   r5   )r   ro   rp   rT   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)rU  rV  rW  r   r   rY  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  rL  r   rM  r  c                 "    t         |           y r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6139D  r  r   c                 .    t        j                  d       y )Nz6_sparse_presolve=True incompatible with presolve=Falserd  r   s    r   r  zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityN  s    LMr   r  c                 "    t         |           y r   r  r  s    r   r  z)TestLinprogIPSparsePresolve.test_bug_6690Q  r  r   )rU  rV  rW  r   r   rY  r[  r\  r]  r  r  r  r  r  r  r  s   @r   r  r  A  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  re   r   r   z(linprog default solver unexpected resultgV瞯<gV瞯<r*   )has_cholmodr  rb   r
   r   r   r0   )r   r   rR   rS   rT   r1  r2  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)r4  r   rE  r   )r
   r   r5   rP  s       r   )test_unbounded_below_no_presolve_originalz?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originall  s:    D&![[+0dCE 	,r   c                 v    t        dd      \  }}}t        |||| j                  ddi      }t        |d       y )Nre   r   Tr   r   r   r   r   s        r   test_choleskyz#TestLinprogIPSpecific.test_choleskyu  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)
Nre   r  r  rS  T)ipr   r   r   r   )	rb   r   r  rF  r   r   r
   r   r5   )r   rR   rS   rT   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~   rz   r7  r  r4  Fr   r   )	r   r  rF  r   r
   rs   r   r   r   r(  s           r   r8  z#TestLinprogIPSpecific.test_bug_8664  s    CaSz1vbTA3  	KCJJ~&JJ(GH!T4tV!%z56IKC	K
 	CKK!?@	K 	Ks   ABBN)	rU  rV  rW  r   r  r  r   r#  r8  r   r   r   r  r  W  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 ri  rd  r   s    r   r  z%TestLinprogRSCommon.test_cyclic_bland  rj  r   c                     t               \  }}}}}}}t        |||||t        | j                  | j                  |	      }t        |||       t        |j                  d       y Nr   r   x0r   r   r   r
   rs   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   rT   rm   rn   ro   rp   r   r   rs   r   s
             r   0test_nontrivial_problem_with_unbounded_variableszDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variables  s^    4F4H14tT66FatT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}g d}t        ||||||| j                  | j                  |	      }	t	        |	||       t        |	j                  d       y )N)r  r   Nr   r  g333333?r*  r   r   r0  r1  s
             r   .test_nontrivial_problem_with_bounded_variableszBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variables  s^    4F4H14tT66<atT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}dg}t        j                  g d      }d}g d}t        ||||||| j                  | j
                  |	      }	t        |	||       t        |	j                  d       y )Nr'   )gibl3g%G/?r   r  g@Q$@)r   r4  r   r5  r*  r   r   )	r   r:   rD   r
   r   r   r5   r   r   r1  s
             r   8test_nontrivial_problem_with_negative_unbounded_variablezLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variable  sy    4F4H14tT66s67?atT4![[$,,6K6BSWWa r   c                     t               \  }}}}}}}g d}t        |||||t        | j                  | j                  |	      }	t        |	j                  d       y N)r   r   r#   rg   r*  ry   r   r
   rs   r   r   r   r   
r   rT   rm   rn   ro   rp   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  )ro   rp   r   )ro   rp   r   r+  r  r   r   )rU   r:   r;   rG   rH   r   r  r   rF  r   r
   r   r1   r5   r   r   r   )
r   rR   rS   rT   r  r  r   r   r2  res3s
             r   %test_redundant_constraints_with_guessz9TestLinprogRSCommon.test_redundant_constraints_with_guess  s    $Q1aAIINNAGG$  	PCJJ(ABJJ~'BCJJ}%!!!DKK@C111T[[SUUKD1q5qqOD	P 	+6TXXq!377"#	P 	Ps   B&EE
N)rU  rV  rW  r   r  r-  r2  r6  r8  r>  rB  r   r   r   r&  r&    s*    G8!!!	!$$r   r&  c                       e Zd ZddiZy)TestLinprogRSBlandpivotr  Nr  r   r   r   rD  rD    s     Gr   rD  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.
        )rm   rn   rs   r   r   r   Ngưr  )r   r
   r   r   r   r   r   r1   r:   allr   rh   )r   rT   rm   rn   r   r   rq   rr   s           r   test_lad_regressionz/TestLinprogHiGHSSimplexDual.test_lad_regression  s    124tadd![[$,,@SZZ#T!"syy5()*suu/3!5%+R ,.:2!= !5 5 6 	7suu/3!5%+R -/J"&&BI!E !5 5 6 	7!5!5s   1D2"D8N)rU  rV  rW  r   r   rJ  r   r   r   rG  rG    s    FG7r   rG  c                       e Zd ZdZi Zy)TestLinprogHiGHSIPMr  N)rU  rV  rW  r   r   r   r   r   rL  rL   	  s    FGr   rL  c                   r   e Zd ZdZi Zej                  j                  d      ej                  j                  e	j                  dk  xr  ej                         dk(  dd      d               Zd	 Zd
 Zd Zd Zej                  j$                  d        Zej                  j$                  d        Zd Zd Zy)TestLinprogHiGHSMIPr   rd   l        LinuxFzgh-16347)r  runrN  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   rT   ro   rp   rs   r   r   r   rF  r7   r  r  )rU   r   r
   r   rC   r1   r>   r:   rf  r  r   diaground)r   rI   rR   rS   rT   rL   rK   rs   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~   rd   r7   r  r   r   r  r{   )r:   rD   rh   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   rh   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   )rs  ire   rv   r   r  g      @r}   ;   )
r:   rD   rh   r   r
   r   r  r   r1   r0   r  s          r   	test_mip4zTestLinprogHiGHSMIP.test_mip4L	  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  )r{   r   r7   r   r   r7  )rT   rm   rn   ro   rp   rs   r   r   )r   ry   r   imip_node_countmip_dual_boundmip_gap)
r:   rD   rh   r
   r   r  r   r1   r0   r<  )	r   rm   rn   ro   rp   rT   rs   r   r   s	            r   	test_mip5zTestLinprogHiGHSMIP.test_mip5\	  s    xx$xx}xx$xx~HH\"bff+266{F34d#DKK"-/ 	

""355)4


""377C0 ww'.:::ww'.:::wwy$'333r   c                 d   t        j                  g dg dg dg dg      }t        j                  g d      }t        j                  g d      }dt         j                  fgdz  }d	gdz  }t        ||||| j                  |
      }t         j
                  j                  |j                  d       y )Nr  r  r  r  r  r#   rs  r  '   r  r  r  r  r  r  r  r  rs  r  r  r  &   r  r  )   r  r  r  r  rj  r  r  i  i(  i:,  i/  r   rd   r  r  r}   r  r}   r#   r   rv   r   rR  i>  )r:   rD   rh   r
   r   r  r   r0   )r   ro   rp   rT   rs   r   r   s          r   	test_mip6zTestLinprogHiGHSMIP.test_mip6t	  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 )Nrf  rg  ri  rk  rm  rn  r   rv   r   )rg   g      ?g{Gz?r  mip_rel_gap)	rT   rm   rn   ro   rp   rs   r   r   r   rc  )r:   rD   rh   r
   rm   rn   r   rB   difffliprI  )r   ro   rp   rT   rs   r   mip_rel_gapssol_mip_gapsrq  r   final_mip_gap	gap_diffss               r   test_mip_rel_gap_passdownz-TestLinprogHiGHSMIP.test_mip_rel_gap_passdown	  s   
 xx8999; < xx34HH01bff+qc!e/' 		/KADt$T!'&1#0+">@C  	NM !K///.		/" GGBGGL12	vvi1n%%%66)q.))))r   c                 :   t        j                  g d      }t        j                  ddgddgddgddgg      }t        j                  g d      }t        |||d      }t         j                  j	                  |j
                  g d       |j                  dk(  sJ y )	N)r   r   r7   r7   rg   r+  )r   r#   r   r#   r   )rs   r   r   )r   r   r+  r   r   )r:   rD   r
   r  r   r1   r   )r   rT   rs   r   r   s        r   test_semi_continuousz(TestLinprogHiGHSMIP.test_semi_continuous	  s    
 HH%&C:SzC:SzJKhh|,a"-g? 	

""355.9zzQr   c           	      $   ddg}ddgg}dg}t        |||ddg      }t        |||t        j                  ddg            }t        |||d      }t        |j                  |j                         t        |j                  |j                         y)z
        Test that when integrality is a list of all zeros, linprog gives the
        same result as when it is an array of all zeros / integrality=None
        r   r7   r   r   r   N)r
   r:   r  r   r1   )r   rT   rm   rn   r1  r2  rA  s          r   test_bug_20584z"TestLinprogHiGHSMIP.test_bug_20584	  s    
 FQyvqt$QFCqt$BJJ1v<NOqt$DATVVTVV$TVVTVV$r   N)rU  rV  rW  r   r   r   rY  r  r  r\  maxsizer]  systemrW  rZ  r\  r_  rd  xslowro  rx  rz  r|  r   r   r   rN  rN  
	  s    FG[[2[[#++"7 #4&x(G3 (  *G	* 
G*0&H"0 40 [[2 2$ [[#* #*J%r   rN  c                   \    e Zd ZddiZej
                  Zej                  Zej                  Zy)AutoscaleTestsrR  TN)rU  rV  rW  r   r   r  r  r  r   r   r   r  r  	  s-    D!G&44M&44M&44Mr   r  c                       e Zd ZdZd Zy)TestAutoscaleIPr   c                 J    d| j                   d<   t        j                  |       S )Nr#  r"  )r   r  r  r   s    r   r  zTestAutoscaleIP.test_bug_6139	  s!    #U++D11r   N)rU  rV  rW  r   r  r   r   r   r  r  	  s    F2r   r  c                       e Zd ZdZy)TestAutoscaleSimplexr   Nr`  r   r   r   r  r  	  s    Fr   r  c                       e Zd ZdZd Zd Zy)TestAutoscaleRSr   c                     t               \  }}}}}}}t        |||||t        | j                  | j                  |	      }t        |||       t        |j                  d       y r)  r,  r  s	            r   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)rU  rV  rW  r   r-  r>  r   r   r   r  r  	  s    F!$r   r  c                       e Zd ZdZeZej                  Zej                  Zej                  Z	ej                  Zej                  Zy)RRTestsr   N)rU  rV  rW  r   r   LCTr  test_RR_infeasibilityrK  r  r  	test_NFLCr  r   r   r   r  r  	  sE    F
CDD''N%%M66I11r   r  c                       e Zd ZddiZy)	TestRRSVDr   SVDNr  r   r   r   r  r  
  s    E"Gr   r  c                       e Zd ZddiZy)TestRRPivotr   rE  Nr  r   r   r   r  r  
  s    G$Gr   r  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   rv   rz   r$  )XrX  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   rU   rb   rt   r   r   r   rY  rZ  r   r   r   r   r   rm   rn   ro   rp   rs   r   filterwarningsr_  rb  rg  rn  r  r  r  r  r  r  r  r  r  r&  rD  rG  rL  rN  r  r  r  r  r  r  r  r  r   r   r   <module>r     sN     O O * 3 5 1 & 6  . 4
LFEK 6:$(.(?D6- 5 F4> 9 9> % %*#ZE 	A. A.R* 89,  : 89B' B :B 898' 8 :8:s$* s$v$ 3 $,(1 ($&;#6 &;\	  	  5^ 5 N^ N3>. 3>l .  , 89<A <A :<AH<$. <$~! !7"3 78+ ~% ~%L 895 5 :52n 2> $n $. 892 2 :2# #%' %"w "uO  K  Ks$   J1 
J? 1J<;J<?K
	K
