a
    atJ                    @   s  d 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ZddlZd	Zzdd
lmZ W n ey   dZY n0 d	ZzddlZddlm Z! W n ey   dZY n0 dd Z"dd Z#dd Z$dd Z%d_ddZ&dd Z'dd Z(d`ddZ)dd Z*dad#d$Z+d%d& Z,d'd( Z-d)d* Z.dZ/dZ0dZ1dZ2dZ3G d+d, d,Z4G d-d. d.e4Z5G d/d0 d0e4Z6G d1d2 d2e4Z7G d3d4 d4e4Z8G d5d6 d6e5Z9G d7d8 d8e5Z:G d9d: d:e5Z;G d;d< d<e6Z<er
G d=d> d>e6Z=er G d?d@ d@e6Z>G dAdB dBe6Z?G dCdD dDe6Z@G dEdF dFZAG dGdH dHe7ZBG dIdJ dJe7ZCG dKdL dLe8ZDG dMdN dNe8ZEG dOdP dPZFG dQdR dReFZGG dSdT dTeFZHG dUdV dVeFZIG dWdX dXZJG dYdZ dZeJZKG d[d\ d\eJZLG d]d^ d^eJZMdS )bz"
Unit test for Linear Programming
    N)assert_assert_allcloseassert_equalassert_array_lessassert_warnssuppress_warnings)raises)linprogOptimizeWarning)approx_derivative)MatrixRankWarning)LinAlgWarningT)UmfpackWarningF)choleskyc                 C   s0   t | j d t | j|k d t| jdd d S )NIncorrectly reported successz)Incorrectly reported number of iterations   z(Failed to report iteration limit reachedr   successr   status)resmaxiter r   q/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/scipy/optimize/tests/test_linprog.py_assert_iteration_limit_reached   s    r   c                 C   s    t | j d t| jdd d S )Nincorrectly reported success   z"failed to report infeasible statusr   r   r   r   r   _assert_infeasible%   s    r   c                 C   s    t | j d t| jdd d S )Nr      z!failed to report unbounded statusr   r   r   r   r   _assert_unbounded+   s    r   c                 C   s"   t | j d t | jdv d d S )Nr   r      z%failed to report optimization failure)r   r   r   r   r   r   r   )_assert_unable_to_find_basic_feasible_sol1   s    r"   :0yE>c                 C   sf   | j sd| j| j}t|t| jd |d urFt| j|d||d |d urbt| j|d||d d S )Nz linprog status {0}, message: {1}r   z*converged to an unexpected objective valueerr_msgrtolatolz#converged to an unexpected solution)	r   formatr   messageAssertionErrorr   r   funx)r   desired_fun	desired_xr&   r'   msgr   r   r   _assert_success;   s     r0   c                 C   s  t jd | | d d  d }t | d | d  d }|| d | | }t | d | | f}g }g }t| d D ]:}| }d||ddddf< ||	  |d qtt| D ]D}t| D ]6}| }d|dd||f< ||	  |d qqt| D ]N}| }|dd|ddf |dd|ddf< ||	  || qt| D ]N}| }|dddd|f |dddd|f< ||	  || q^| }|ddt| t| f |ddt| t| f< ||	  || | }|ddt| td|  d df |ddt| td|  d df< ||	  || t j
t |td}	t j
|td}
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Zdtype)nprandomseedarangeZreshapezerosrangecopyappendflattenarrayvstackfloatrandshape)nMZnumbersr7   ZA_listZb_listiZA_rowjAbcr   r   r   magic_squareP   sR    ((0
""
rH   c                 C   s   t jd t jj| |fd }t | | | f}t | }t| D ]0}|d }d|||| || f< ||  ||< qDt || | f}t |}t|D ]&}|d }d|||d|f< d||< qt ||f}	t ||f}
|	|
| fS )z -> A b c LP test: m*n vars, m+n constraints
        row sums == n/m, col sums == 1
        https://gist.github.com/denis-bz/8647461
    r   sizer   N)	r3   r4   r5   Zexponentialr7   r8   r=   ZhstackZravel)mrA   rG   ZArowZbrowrD   Zj1ZAcolZbcolrE   rF   r   r   r   lpgen_2d   s"    


rL   c                 C   s   t j|  d\}}}t j|d }t j||d }t j|d }t j||d }t j|d }t j| }	t j|}
t j |	|	t j  k < t j|
|
t j k< t |	|
fj}||||||fS )N)
      2         ?)r3   r4   r5   r?   infr=   T)r5   Zm_eqZm_ubrA   rG   A_ubb_ubA_eqb_eqlbubboundsr   r   r   very_random_gen   s    
rZ   c                  C   sZ   g d} g dg dg dg dg}g d}g dg}dg}g d	}d
}| ||||||fS )N)r1      r!   )r]      	   )r   r1   r   )rM   r]      )r^   r1   r   r!   )r`   r^   r\   r^   )ra   r   r   )gk椀?gs?r   gkL?gqY:^@r   )rG   rS   rT   rU   rV   x_starf_starr   r   r   nontrivial_problem   s    
rg   r[   r_   d   c                 C   sn  t j|  t jjdd||fd}t j|}t jjdd||fd}|||  t jjdd|d }t || }d|d|< tjd| || f}	d}
t	|D ]x}||dd|f  |	|
d|f< d|	|
|| f< d| |dd|f  |	|
d d|f< d|	|
d || f< |
d7 }
q|	
 }	t d| }||ddd< | |ddd< dg| d	g|  }||	||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   rI   h㈵>Nr   r1   NNr   N)r3   r4   r5   normalrandnonesscipysparseZ
lil_matrixr8   Ztocscr7   )r5   rK   drA   phiZw_truer,   yrG   rS   idxiirT   bndsr   r   r   l1_regression_prob   s*    
 (
rw   c                    s   i   fdd}t ddg}ddgddgddgg}g d}t||||| jd	}t|d
ddgd t d |d  t d |d  t d |d  t d |d  d S )Nc                    s   |  d}|  d}t|  ddv  t|  dtdv  tt|  dt tt|t tt|t | d  d< | d	  d	< | d
  d
< | d  d< d S )Nr)   completephaser   r   r   r!   nitr,   r+   slackcon)popr   r8   
isinstanceintboolstr)r   r)   rx   Zlast_cbr   r   cb   s    

z!generic_callback_test.<locals>.cbr`   r   r   r   rM   r[   r!   rS   rT   callbackmethod      2r^   r-   r.   r+   r,   r}   r|   )r3   r<   r	   r   r0   r   selfr   rG   rS   rT   r   r   r   r   generic_callback_test   s    r   c                  C   sp   t ddg} ddgddgddgg}g d}ttt| ||dd ttt| ||d	d ttt| ||d
did d S )Nr`   r   r   r   r   r   ekki-ekki-ekkirS   rT   r   z
highs-ekki	rr_methodrS   rT   options)r3   r<   assert_raises
ValueErrorr	   )rG   rS   rT   r   r   r    test_unknown_solvers_and_options  s    r   c                  C   sR   t ddg} ddgddgddgg}g d}t| ||dd}t|d	dd
gd d S )Nr`   r   r   r   r   r   highsr   r   r^   r   )r3   r<   r	   r0   )rG   rS   rT   r   r   r   r   test_choose_solver  s
    r   c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNeOjPjQeRjSdkdddd ZTdS )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                 C   s   t |  d S N)r   r   r   r   r   test_callback<  s    z LinprogCommonTests.test_callbackc                 C   s8   t dd\}}}t|||| jddid}t|dd d S )NrN   dispTrS   rT   r   r   T*Pr-   rL   r	   r   r0   r   rE   rF   rG   r   r   r   r   	test_disp?  s
    zLinprogCommonTests.test_dispc                 C   sT   ddg}ddgddgg}ddg}d}d}t |||||f| j| jd	}t|d
d d S )Nr1   r!   r`   r   r   r^   rj   r`   N)rS   rT   rY   r   r   r   )r	   r   r   r0   )r   rG   rE   rF   	x0_bounds	x1_boundsr   r   r   r   test_docstring_exampleF  s    z)LinprogCommonTests.test_docstring_examplec              	   C   s0   dg}dgg}d}t tt|||| j| jd d S )Nr   ZhellorU   rV   r   r   )r   	TypeErrorr	   r   r   )r   rG   rU   rV   r   r   r   test_type_errorQ  s    z"LinprogCommonTests.test_type_errorc              
   C   sr   t dg}t dgg}t dg}| }dt jf}t|||tt|| j| jd}t	|ddgd t
|| d S )N      ?      @      r   r   rd   r   )r3   r<   r9   rQ   r	   rU   rV   r   r   r0   r   )r   rG   rS   Z	b_ub_origrT   rY   r   r   r   r   test_aliasing_b_ub[  s    
z%LinprogCommonTests.test_aliasing_b_ubc              
   C   sr   t dg}t dgg}t dg}| }dt jf}t|tt|||| j| jd}t	|ddgd t
|| d S )Nr   r   r   r   r   r   )r3   r<   r9   rQ   r	   rS   rT   r   r   r0   r   )r   rG   rU   Z	b_eq_origrV   rY   r   r   r   r   test_aliasing_b_eqh  s    
z%LinprogCommonTests.test_aliasing_b_eqc              
   C   sV   dg}dgg}dg}dgg}dg}d}t ||||||| j| jd}t|ddgd d S )Nr   r   g       @)            $@r   r   r   )r	   r   r   r0   r   rG   rS   rT   rU   rV   rY   r   r   r   r   test_non_ndarray_argsu  s    z(LinprogCommonTests.test_non_ndarray_argsc                    sz   t ddg}ddgddgddgg}g d}d d d d d i f fdd	} fd	d
 jD }d|d< tt|||||d d S )Nr`   r   r   r   r   r   c              
      s   t | ||||| j|d d S Nr   r	   r   )rG   rS   rT   rU   rV   rY   r   r   r   r   f  s    z2LinprogCommonTests.test_unknown_options.<locals>.fc                    s   i | ]}| j | qS r   r   .0keyr   r   r   
<dictcomp>      z;LinprogCommonTests.test_unknown_options.<locals>.<dictcomp>*   Zspamr   )r3   r<   r   r   r
   )r   rG   rS   rT   r   or   r   r   test_unknown_options  s    z'LinprogCommonTests.test_unknown_optionsc                    s"  d fdd	}t t|g dddgd t t|g dg dd t t|g dddgd t t|d	d
gd	d
ggd	d
gd t t|d	d
gd	ggd	gd t t|d	d
gd	d
ggd	d
gd t t|d	d
gd	ggd	gd t t|d	d
gd	gd	d d jv r jd rd S t t|d	d
gtdd	d d S )Nc              
      s    t | ||||| j jd d S r   r	   r   r   rG   rS   rT   rU   rV   rY   r   r   r   r     s    z1LinprogCommonTests.test_invalid_inputs.<locals>.fr   r   r   rz   r   r!   rY   )rz   r   )r   r!      r   r   r   r   )rS   rT   )rU   rV   _sparse_presolve)r   r   r   )rS   rV   )NNNNN)r   r   r   r3   r7   )r   r   r   r   r   test_invalid_inputs  s      z&LinprogCommonTests.test_invalid_inputsc              	      s  d fdd	}t jd d}d}tj||d}t j|}t j|}|t j| }|t j| }t ||f}	|| }
 jdv rt	t
d j d	d
( t|||
|	 j jd W d    n1 s0    Y  n@i  j} jdv  rd|d< t|||
|	 j|d}|jsJ d S )Nc              
      s    t | ||||| j jd d S r   r   r   r   r   r   r     s    z5LinprogCommonTests.test_sparse_constraints.<locals>.fr   rh      rP   >   simplexrevised simplexzMethod 'z.' does not support sparse constraint matrices.match)rG   rU   rV   rY   r   r   >   interior-pointTrp   )NNNNN)r3   r4   r5   ro   rp   r?   rm   Zcolumn_stackr   r   r   r	   r   r   )r   r   rK   rA   rU   Zx_validrG   rX   rW   rY   rV   r   r   r   r   r   test_sparse_constraints  s.    

&

z*LinprogCommonTests.test_sparse_constraintsc                 C   sh   g d}g dg dg dg}g d}t jd d}t|||| jd|id	}t|| t|j| d S )
Nr!   r[   r   r   r   r   r   r   r   r1   r   r   r         @r[   r   r1   r   r[   rM   r!   r   r   r1         iX  r   r   r   r   )r3   r4   r5   r	   r   r   r   r{   )r   rG   rE   rF   r   r   r   r   r   test_maxiter  s    
zLinprogCommonTests.test_maxiterc                 C   s  | j dd}tdgd| j| j d}t|dd |r@t|jd tg dg d| j| j d}t|d	g d
 |r|t|jd tddgddg| j| j d}t|dddg |rt|jd tg dg dg dgddgg d| j| j d}t|dg d |r
t|jd d S )NpresolveTr   )r   r   rY   r   r   r   r   ))r   r   )r1   r1   )r   r      )r   r1   r   )r   r   r   )r   r   r   r   r   r   )r   r   r   rb   ))r   )r   rM   )      @r   )rU   rV   rY   r   r      )r   rb   r   )r   getr	   r   r0   r   r{   r   do_presolver   r   r   r   test_bounds_fixed  s4    z$LinprogCommonTests.test_bounds_fixedc                 C   s   | j dd}tdgd| j| j d}t| |r<t|jd tdgdg| j| j d}t| |rlt|jd tg dg d| j| j d}t| |rt|jd d S )	Nr   Tr   r   r   r   r   ))r   r   rz   r   )r   r   r	   r   r   r   r{   r   r   r   r   test_bounds_infeasible  s    z)LinprogCommonTests.test_bounds_infeasiblec              	      s   j dd}| o jdk}g d}dtjtjfdg}dtj tj fdg}|r$ fdd}ttF tt	 |||d	 W d    n1 s0    Y  W d    n1 s0    Y  ttF tt	 |||d	 W d    n1 s0    Y  W d    n1 s0    Y  n\t
|| j j d
}t| |rRt|jd t
|| j j d
}t| |rt|jd d S )Nr   Tr   r   rz   r   c                    s   t | | j jd}|S )Nr   r   )rG   rY   r   r   r   r   g#  s    z6LinprogCommonTests.test_bounds_infeasible_2.<locals>.gr   rG   rY   r   r   r   )r   r   r   r3   rQ   pytestwarnsRuntimeWarningr   
IndexErrorr	   r   r   r{   )r   r   Zsimplex_without_presolverG   Zbounds_1Zbounds_2r   r   r   r   r   test_bounds_infeasible_2  s*    	HLz+LinprogCommonTests.test_bounds_infeasible_2c                 C   s&   ddg}t || j| jd}t| d S )Nr1   r   r   )r	   r   r   r   )r   rG   r   r   r   r   test_empty_constraint_18  s    z*LinprogCommonTests.test_empty_constraint_1c                 C   s\   g d}dt jft j dfddg}t||| j| jd}t| | jddrXt|jd d S )N)r1   r   r1   r   r   r1   r   r   r   T)	r3   rQ   r	   r   r   r   r   r   r{   r   rG   rY   r   r   r   r   test_empty_constraint_2=  s    z*LinprogCommonTests.test_empty_constraint_2c                 C   sL   g d}dt jft j dfddg}t||| j| jd}t|g ddd d S )N)r   r1   r   r1   r   r   r   )r   r   r1   r   r   r.   r-   )r3   rQ   r	   r   r   r0   r   r   r   r   test_empty_constraint_3G  s    z*LinprogCommonTests.test_empty_constraint_3c              
   C   sb   t ddgd }ddgddgddgg}g d}t|||ttt| j| jd}t|ddd	gd
 d S )Nr   r   r1   r   r   r   r   ir^   r   	r3   r<   r	   rU   rV   rY   r   r   r0   r   rG   rS   rT   r   r   r   r   test_inequality_constraintsN  s    z.LinprogCommonTests.test_inequality_constraintsc              
   C   sX   ddg}ddgddgddgg}g d}t |||ttt| j| jd}t|d	d
dgd d S )Nr^   r   r   r1   r   r   )r   r1   r1   r   r   gUUUUUU?gUUUUUU?r   r	   rU   rV   rY   r   r   r0   r   r   r   r   test_inequality_constraints2Z  s    z/LinprogCommonTests.test_inequality_constraints2c              
   C   sp   ddg}d}t |tttt|| j| jd}t|ddgd ddg}t |tttt|| j| jd}t|ddgd d S )Nr   r   rz   r   r.   )r	   rS   rT   rU   rV   r   r   r0   r   r   r   r   test_bounds_simpleg  s    z%LinprogCommonTests.test_bounds_simplec              
   C   sZ   t dg}t dgg}t dg}d}t|tt|||| j| jd}t|ddgd d S )Nr   r   )r   Nr   r   r   r3   r<   r	   rS   rT   r   r   r0   r   rG   rU   rV   rY   r   r   r   r   test_bounded_below_only_1s  s    z,LinprogCommonTests.test_bounded_below_only_1c              
   C   s`   t d}t d}t g d}dt jf}t|tt|||| j| j	d}t
||t |d d S )Nr   r   rP   r   r   r3   rn   Zeyer<   rQ   r	   rS   rT   r   r   r0   sumr   r   r   r   test_bounded_below_only_2|  s    


z,LinprogCommonTests.test_bounded_below_only_2c              
   C   sZ   t dg}t dgg}t dg}d}t|tt|||| j| jd}t|ddgd d S )Nr   r   )Nr   r   r   r   r   r   r   r   r   test_bounded_above_only_1  s    z,LinprogCommonTests.test_bounded_above_only_1c              
   C   sb   t d}t d}t g d}t j df}t|tt|||| j| j	d}t
||t |d d S )Nr   r   r!   r   r   r   r   r   r   r   test_bounded_above_only_2  s    

z,LinprogCommonTests.test_bounded_above_only_2c              
   C   sd   t d}t d}t g d}t j t jf}t|tt|||| j| j	d}t
||t |d d S )Nr   r   r   r   r   r   r   r   r   test_bounds_infinity  s    

z'LinprogCommonTests.test_bounds_infinityc              
   C   s   t ddgd }t jddgddggt jd}ddg}t j t jf}dt jf}||f}t|||tt|| j| jd}t	|d	d
dgd d S )Nr1   r!   r`   r   r   r2   r^   r   gm۶m&g$I$Ig%I$I@r   )
r3   r<   Zfloat64rQ   r	   rU   rV   r   r   r0   )r   rG   rS   rT   r   r   rY   r   r   r   r   test_bounds_mixed  s    

z$LinprogCommonTests.test_bounds_mixedc              
   C   sV   ddg}ddgddgddgg}g d}dd	g}t |||tt|| j| jd
}t| d S Nrd   r   rb   r   r   r   )   r   r   r   r   rk   r   )r	   rU   rV   r   r   r   r   rG   rS   rT   rY   r   r   r   r    test_bounds_equal_but_infeasible  s    z3LinprogCommonTests.test_bounds_equal_but_infeasiblec              
   C   sV   ddg}ddgddgddgg}g d}dd	g}t |tt|||| j| jd
}t| d S r  )r	   rS   rT   r   r   r   r   r   r   r   !test_bounds_equal_but_infeasible2  s    z4LinprogCommonTests.test_bounds_equal_but_infeasible2c              
      sj   ddg}ddgddgg}ddg}ddg} fd	d
 j D }d|d< t|||tt| j|d}t| d S )Nr   r   g?g@r!   r[   rz   r  c                    s   i | ]}| j | qS r   r   r   r   r   r   r     r   zDLinprogCommonTests.test_bounds_equal_no_presolve.<locals>.<dictcomp>Fr   r   )r   r	   rU   rV   r   r   r   rG   rS   rT   rY   r   r   r   r   r   test_bounds_equal_no_presolve  s    z0LinprogCommonTests.test_bounds_equal_no_presolvec           
   
   C   s   d\}}t jd t j|}d|d< t j||}d|d d df< t j|}g dg}d}g d}t||||||| j| jd}	t|	dd	 d S )
Nr   r   r   )r   r   r   r   r   )ra   rM   r  )ra   Nrj   r   gyMj#r   )r3   r4   r5   r?   r	   r   r   r0   
r   rK   rA   rG   rU   rV   rS   rT   rY   r   r   r   r   test_zero_column_1  s    
z%LinprogCommonTests.test_zero_column_1c           
   
   C   s   t jd d\}}t j|}d|d< t j||}d|d d df< t j|}t j||}d|d d df< t j|}d}t||||||| j| jd}	t|	 | jddrt	|	j
d d S )	Nr   r    r1   r   rj   r   r   T)r3   r4   r5   r?   r	   r   r   r   r   r   r{   r  r   r   r   test_zero_column_2  s"    z%LinprogCommonTests.test_zero_column_2c              
   C   sR   g d}g dg dg dg}g d}t |tt||t| j| jd}t|dd d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r	   rS   rT   rY   r   r   r0   r   rG   rU   rV   r   r   r   r   test_zero_row_1  s    z"LinprogCommonTests.test_zero_row_1c              
   C   sR   g dg dg dg}g d}g d}t |||ttt| j| jd}t|dd d S )Nr  r  r  r   r   r   r   r   )r   rS   rT   rG   r   r   r   r   test_zero_row_2  s    z"LinprogCommonTests.test_zero_row_2c              
   C   s   d\}}t j|}t j||}d|dd d f< t j|}t|tt||t| j| jd}t	| | j
ddr|t|jd d S Nr    r   r   r   T)r3   r4   r?   r	   rS   rT   rY   r   r   r   r   r   r{   )r   rK   rA   rG   rU   rV   r   r   r   r   test_zero_row_3  s    z"LinprogCommonTests.test_zero_row_3c              
   C   s   d\}}t j|}t j||}d|dd d f< t j| }t|||ttt| j| jd}t	| | j
ddr~t|jd d S r  )r3   r4   r?   r	   rU   rV   rY   r   r   r   r   r   r{   )r   rK   rA   rG   rS   rT   r   r   r   r   test_zero_row_4  s    z"LinprogCommonTests.test_zero_row_4c              
   C   sn   g d}g dg dg dg dg}g d}t |tt||t| j| jd}t| | jddrjt|j	d	 d S )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r!   r   r   Tr   )
r	   rS   rT   rY   r   r   r   r   r   r{   r  r   r   r   test_singleton_row_eq_1   s    z*LinprogCommonTests.test_singleton_row_eq_1c              
   C   sX   g d}g dg dg dg dg}g d}t |tt||t| j| jd}t|dd d S )	Nr  r  r  r  )r   r   r   r!   r   r!   r   r  r  r   r   r   test_singleton_row_eq_2,  s    z*LinprogCommonTests.test_singleton_row_eq_2c              
   C   sv   g d}g dg dg dg dg}g d}g d}t |||tt|| j| jd}t| | jd	d
rrt|jd d S )Nr  r  r  r1   r   r   r   r  )r   r   r   r!   rj   rk   rk   rk   r   r   Tr   	r	   rU   rV   r   r   r   r   r   r{   r	  r   r   r   test_singleton_row_ub_14  s    z*LinprogCommonTests.test_singleton_row_ub_1c              
   C   s`   g d}g dg dg dg dg}g d}g d}t |||tt|| j| jd}t|d	d
 d S )Nr  r  r  r"  r  )r   r         r!   r#  r   rP   r   )r	   rU   rV   r   r   r0   r	  r   r   r   test_singleton_row_ub_2A  s    z*LinprogCommonTests.test_singleton_row_ub_2c              
   C   sN   ddg}ddgddgddgg}g d}t |||ttt| j| jd}t| d S )Nr1   r   r   )r   r   r   r   )r	   rU   rV   rY   r   r   r   r   r   r   r   test_infeasibleJ  s    z"LinprogCommonTests.test_infeasiblec              
   C   sX   dg}dgg}d}d}t |||tt|| j| jd}t| | jddrTt|jd d S )	Nr   r   r!   )r   r^   r   r   Tr   r$  r	  r   r   r   !test_infeasible_inequality_boundsU  s    z4LinprogCommonTests.test_infeasible_inequality_boundsc              
   C   sR   t ddgd }ddgddgg}ddg}t|||ttt| j| jd}t| d S )Nr   r1   r   r   )	r3   r<   r	   rU   rV   rY   r   r   r   r   r   r   r   test_unboundedb  s    z!LinprogCommonTests.test_unboundedc                    s^   dg}dg} fdd j D }d|d< t|| j|d} jdkrRt|jd	 nt| d S )
Nr   Nr   c                    s   i | ]}| j | qS r   r   r   r   r   r   r   p  r   zQLinprogCommonTests.test_unbounded_below_no_presolve_corrected.<locals>.<dictcomp>Fr   r   r   r   )r   r	   r   r   r   r   )r   rG   rY   r   r   r   r   r   *test_unbounded_below_no_presolve_correctedl  s    
z=LinprogCommonTests.test_unbounded_below_no_presolve_correctedc              
   C   s   t g d}t g dg dg dg}t g d}g d}t|||tt|| j| jd}t| | j 	dst
|jd	 t j t
|jd
d d d
S )|
        Test whether presolve pathway for detecting unboundedness after
        constraint elimination is working.
        )r   r   r   r   r1   r1   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r1   r   r   r   )rj   rj   rj   r   r   rk   r   r   r1   N$   $The problem is (trivially) unboundedr3   r<   r	   rU   rV   r   r   r   lower
startswithr   r,   rQ   r)   r	  r   r   r   *test_unbounded_no_nontrivial_constraints_1|  s     
z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_1c              
   C   s   t g d}t g dg dg dg}t g d}g d}t|||tt|| j| jd}t| | j 	dst
|jd	 t j  t
|jd
d d d
S )r-  )r   r   r   r   r1   r   r.  r/  )r   r   r   r   r   r   r0  )rj   rj   rj   r   r   )Nr   r   r   r1   Nr1  r2  r3  r	  r   r   r   *test_unbounded_no_nontrivial_constraints_2  s     
z=LinprogCommonTests.test_unbounded_no_nontrivial_constraints_2c              
   C   sd   t g dd }g dg dg dg}g d}t|||ttt| j| jd}t|g dd	d
d d S )N)rh   rM   r   r1   r   )rN   r   r   )   rN   r   )r   rh   '  r   )r   r   r9  gh㈵>Hz>)r.   r'   r&   r   r   r   r   r   test_cyclic_recovery  s    z'LinprogCommonTests.test_cyclic_recoveryc              
   C   s   t g d}t g dg dg dg}g d}d}dd | j D }||d	< t|||ttt| j|d
}| jdkr| j	dst
||d	  nt|g dd d S )N)ra   9   r_   g      8@)rP   g            r_   )rP   g      r&  r   r  )r   r   r   rh   c                 S   s   i | ]\}}||qS r   r   )r   r   valr   r   r   r     r   z8LinprogCommonTests.test_cyclic_bland.<locals>.<dictcomp>r   r   r   bland)r   r   r   r   r   )r3   r<   r   itemsr	   rU   rV   rY   r   r   r   r0   )r   rG   rS   rT   r   r   r   r   r   r   test_cyclic_bland  s    
z$LinprogCommonTests.test_cyclic_blandc                 C   s   d\}}t j|}t j||}t j|}d|dd d f  |dd d f< |d  d9  < t 8}|td t|tt||t	| j
| jd}W d    n1 s0    Y  t| d S )N)rM   rM   r   r   r1   A_eq does not appear...r   )r3   r4   r?   r   filterr
   r	   rS   rT   rY   r   r   r   )r   rK   rA   rG   rU   rV   supr   r   r   r   $test_remove_redundancy_infeasibility  s     $z7LinprogCommonTests.test_remove_redundancy_infeasibilityc           	   
   C   sB   t  \}}}}}}}t|||||t| j| jd}t|||d d S )Nr   r   )rg   r	   rY   r   r   r0   	r   rG   rS   rT   rU   rV   re   rf   r   r   r   r   test_nontrivial_problem  s
    z*LinprogCommonTests.test_nontrivial_problemc                 C   s   t dd\}}}t N}|td |td |t t|||ttt	| j
| jd}W d    n1 sj0    Y  t|dd d S )NrN   $Solving system with option 'sym_pos'invalid value encounteredr   r   r   )rL   r   rC  r
   r   r   r	   rU   rV   rY   r   r   r0   )r   rS   rT   rG   rD  r   r   r   r   test_lpgen_problem  s    
$z%LinprogCommonTests.test_lpgen_problemc                 C   s4  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  6}|t t|tt||t| j| jd}W d    n1 s0    Y  t	|dddd	 d S )
N)r   r!   r_      r!   r   r[   rb   r   r         r   r   )r      i!   r   r   ir   i  ư>r:  )r-   r'   r&   )
r   rC  r   r	   rS   rT   rY   r   r   r0   )r   rG   rA   prU   rV   rD  r   r   r   r   test_network_flow  s"    
&z$LinprogCommonTests.test_network_flowc           	      C   s   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  h}tr|t |td	 |td
 |td |t t|tt	|||| j
| jd}W d    n1 s0    Y  t|dd d S )N)r   r   r   r   r   r   r!   r   r   r   r   )rd   r   r   r!   scipy.linalg.solve
Ill...rB  Solving system with option...r   r  r   )r   has_umfpackrC  r   r   r
   r   r	   rS   rT   r   r   r0   )	r   rG   rY   rA   rQ  rU   rV   rD  r   r   r   r   "test_network_flow_limited_capacity  s2    

$z5LinprogCommonTests.test_network_flow_limited_capacityc              
   C   sL   g d}g dg dg}ddg}t |||ttt| j| jd}t|dd d S )	N)r   r`   rd   )r   r   r   )r   r   r   rM   r   r   ir   r   r   r   r   r   (test_simplex_algorithm_wikipedia_example%  s    z;LinprogCommonTests.test_simplex_algorithm_wikipedia_examplec              
   C   s\   g d}g dg dg dg}g d}t |tt||t| j| jd}t|dg dd	d
d d S )Nr   r   r   r   r   r   g     s@)g     P@r   g     1@r   g     f@r   gTqs*>r:  )r-   r.   r'   r&   r  r  r   r   r   test_enzo_example0  s    z$LinprogCommonTests.test_enzo_examplec                 C   s   g d}g dg dg dg dg dg}g d}t  8}|td t|tt||t| j| jd	}W d    n1 sv0    Y  t	|d
g dd d S )N)gffffff@g333333@g%@gffffffg333333g%)r1   r1   r1   r   r   r   )r   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?rZ  rZ  rB  r   gRQ)rZ  g?        r[  g?rZ  r   )
r   rC  r
   r	   rS   rT   rY   r   r   r0   )r   rG   rU   rV   rD  r   r   r   r   test_enzo_example_bD  s     $z&LinprogCommonTests.test_enzo_example_bc              
   C   s   d}t | }dt j t d|d  |d  }t t |d t |f}ddg}t|tt	||t
| j| jd}t|dt |d d S )NrN   r   r   r   r   r   )r3   rn   pir6   r=   cossinr	   rS   rT   rY   r   r   r0   r7   r   rK   rG   tmprU   rV   r   r   r   r   #test_enzo_example_c_with_degeneracyU  s    "z6LinprogCommonTests.test_enzo_example_c_with_degeneracyc              
   C   sz   d}t | }dt j t | |d  }t t |d t |f}ddg}t|tt	||t
| j| jd}t| d S )NrO   r   r   r   r   )r3   rn   r]  r6   r=   r^  r_  r	   rS   rT   rY   r   r   r   r`  r   r   r   &test_enzo_example_c_with_unboundedness`  s    z9LinprogCommonTests.test_enzo_example_c_with_unboundednessc              
      s   d}t | }dt j t | |d  }t t |d t |f}ddg} fdd jD }d|d< t|t	t
||t j|d}t| d S )	NrO   r   r   c                    s   i | ]}| j | qS r   r   r   r   r   r   r   s  r   zMLinprogCommonTests.test_enzo_example_c_with_infeasibility.<locals>.<dictcomp>Fr   r   )r3   rn   r]  r6   r=   r^  r_  r   r	   rS   rT   rY   r   r   )r   rK   rG   ra  rU   rV   r   r   r   r   r   &test_enzo_example_c_with_infeasibilityk  s    z9LinprogCommonTests.test_enzo_example_c_with_infeasibilityc              
   C   s   t g d}t g dg dg dg dg dg}t g d}t g dg d	g}t d
d
g}t|||||t| j| jd}t|d
t |dd d S )N)ggQ뱿Mbp?re  re  re  )r   r   r   r   r   r   )r   r   r   r   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   r1   r   r1   r   )r   r   r1   r   r1   r   r   r   g>)r-   r.   r'   )r3   r<   r	   rY   r   r   r0   Z
zeros_like)r   rG   rS   rT   rU   rV   r   r   r   r   test_basic_artificial_varsz  s    z-LinprogCommonTests.test_basic_artificial_varsc              
   C   s   t d\}}}}}}t||||||| j| jd}t|j t|j t|j  t|jdk t	||j
 |j t	|||j
  |jdd t	|||j
  |jdd d S )Nr   rS   rT   rU   rV   rY   r   r   z%Optimization terminated successfully.gdy=r'   )rZ   r	   r   r   r   r   r{   r   r)   r   r,   r+   r}   r|   r   r   r   r   test_optimize_result  s    


z'LinprogCommonTests.test_optimize_resultc           
   /   C   sb  g d}d}d}d}t 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 g d!}t g d"}t N}|td# |td$ |t t|||tt	|| j
| jd%}	W d    n1 sH0    Y  t|	d&d' d S )(N)rk   r   rh   rj  rj  rj  rj  rj  r     rk  rk  rk  rk  rk  rk   rk   rk   rk   rk   rk   gqq?     g)r   gQr   r   r`   r   r   r   r1   r1   r   r1   r1   r   r   r   r   r   r   r   r   g333333r`   r1   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   gףp=
?r   gffffff?g @)r[  r   r   rh   rh   rh   rh   rh   rh   rl  rl  rl  rl  rl  rl  r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH  rI  r   g^Zr   )r3   r<   r   rC  r
   r   r   r	   rU   rV   r   r   r0   )
r   rY   r   r   hrS   rT   rG   rD  r   r   r   r   test_bug_5400  sZ    ((((((((
&z LinprogCommonTests.test_bug_5400c              
   C   s   t g d}t g dg dg}t ddg}t g dg }t dg }d}t||||||| j| jd	}t|d
t g dd d S )Nr  )r   r[  r[  )     @r[  rp  g      @rm  )r[  g    .Ag    .Ag    cArj   r   gfffff-@)r   g@r   r   r3   r<   r	   r   r   r0   )r   rG   rU   rV   rS   rT   rY   r   r   r   r   test_bug_6139  s    	z LinprogCommonTests.test_bug_6139c                 C   sV  t g dg}t dg}t g dg dg dg dg dg}t g d}t g d	g d
gj}t g d}t h}tr|t |td |td |td |t	 t
||||||| j| jd}W d    n1 s0    Y  d}	t g d}
t||	|
d d}t|d d df | |j t|j|d d df |  d S )N)
r   r   r   g(\?r   ?r   r   g(\?r   g%䃞?)
r   r   r   zG?r   r   r   gɿr   g)\(̿)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   gQ?r   r   r   r   r   r   )
r   gQ      пr   r   r   g{Gz r   r   gQ?)
r   r   r   r   r   r   r   ru  r   r   )gGz?r   gjt?g+gI+)
gzG
ףp=
(\?rY  gQտgGzGz?
ףp=
?g333333\(\)
Gz?g{Gz?gzG@gQ?rt  rP   g)\(?g(\?{Gz?g333333ÿ)
g=
ףp=gffffff?g?g(\g(\gp=
ף?g
ףp=
@g{Gz?gQ?gQ?z%Solving system with option 'cholesky'rH  rI  r   gV)
r{  rv  rw  rY  rt  rP   rx  ry  r|  rz  r   rP  r   r   )r3   r<   rR   r   rU  rC  r   r
   r   r   r	   r   r   r0   r   r,   )r   rU   rV   rS   rT   rY   rG   rD  r   r-   r.   r'   r   r   r   test_bug_6690  sB    

$z LinprogCommonTests.test_bug_6690c                 C   s   t d\}}}}t N}|td |td |t t|tt||t	| j
| jd}W d    n1 sj0    Y  d}t||d t||j| tt|jjd |j d S )Nr   rB  rI  r   -U?r   ri   )rH   r   rC  r
   r   r   r	   rS   rT   rY   r   r   r0   r   dotr,   r   r3   r7   rJ   )r   rU   rV   rG   NrD  r   r-   r   r   r   test_bug_7044  s    
$z LinprogCommonTests.test_bug_7044c                 C   s   t g d}t 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 g d}t g dg}t dgg}dgd }t||||||| j| jd}t|ddd  d S )!N)	r1   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   rj   r_   r   ghb$[@rP  r-   r'   rq  r   r   r   r   test_bug_7237'  sB    
z LinprogCommonTests.test_bug_7237c                 C   s   t g dg dg dg dg}t |jd }t |jd  }dg|jd  }t B}|td |t t	|||t
t|| j| jd	}W d    n1 s0    Y  | jd
ddk r| jdkrt| nt|ddd d S )N)X  i  iD4       3i)ii    @i  )r  r   r   r  r   )r  r   r   r  r   r   r   r   r   rI  r   tolg&.>绽|=r   g rP  r  )r3   r<   r7   r@   rn   r   rC  r   r   r	   rU   rV   r   r   r   r"   r0   )r   rS   rT   rG   rY   rD  r   r   r   r   test_bug_8174P  s$    
$
z LinprogCommonTests.test_bug_8174c                 C   s   t g d}t d }t dgdgdgdgdgdgdgg}t g dg dg dg dg dg}t d	gd
gd
gd
gd
gg}t F}tr|t |td t|||||t	| j
| jd}W d    n1 s0    Y  t|dd d S )N)r   r   r   r   r   r   r   rb   r   )r   r   r   r   r   r   r   )rZ  g?g?r   r   r   r1   )rZ  r   r   r   r   r   gUUUUUU)r   rs  r   r   r   r   )r   r   rZ  r   r   r   r  rh   r   rB  r   g?E@r   )r3   r<   identityr   rU  rC  r   r
   r	   rY   r   r   r0   r   rG   rS   rT   rU   rV   rD  r   r   r   r   test_bug_8174_2g  s&    &
$z"LinprogCommonTests.test_bug_8174_2c                 C   sn   t g d}t g dg dg dg dg dg}t g d}t|||| j| jd}t|g d	d
 d S )N)rb   r   rd         ?r  )r!         @r  r         )r   r=  r   r   rP   )r   r&  r!   g      )r]   )r1   g      @r   r  r   )r  r   g      r1   g      #@)r   r   r   r   r   )rS   rT   r   r   )r   r   rN  gUUUUUU@gUUUUUU#@r   )r3   r<   r	   r   r   r0   r   r   r   r   test_bug_8561  s    z LinprogCommonTests.test_bug_8561c           
      C   sJ  g d}g dg dg dg dg}g d}g d}d}t  P}trN|t |td	 |t t|||tt|| j	| j
d
}W d    n1 s0    Y  |g d |d d|d< t  P}tr|t |td	 |t t|||tt|| j	| j
d
}W d    n1 s0    Y  d}	t|||	d t|||	d d S )N)ra   rM   r^   r   )r[   rc   rd   r^   )rc   r[   r!   r\   )rd   r!   r[   rd   )r   r`   r`   ra   )r_   r  rd   )rk   rk   rk   rk   g      B@rI  r   )r   r   r1   r   r   rj   r   ri   )r-   r&   )r   rU  rC  r   r   r   r	   rU   rV   r   r   r:   r0   )
r   rG   rS   rT   rY   r-   rD  res1res2r&   r   r   r   test_bug_8662  s>    

$


&z LinprogCommonTests.test_bug_8662c              
   C   sR   ddg}ddgg}dg}ddg}t |tt|||| j| jd}t|dd	gd
d d S )Nr   r   r   r]   r\   rk   rj   r   g۶m۶m?gI$I$@r   )r	   rS   rT   r   r   r0   r   r   r   r   test_bug_8663  s    
z LinprogCommonTests.test_bug_8663c                 C   s   dg}dgdgg}ddg}dgdgdgg}g d}t  B}|t |td t|||||t| j| jd	}W d    n1 s0    Y  t| d S )
Nr!   r   r   r   rc   r_   r   r   rM   rT  r   )	r   rC  r   r
   r	   rY   r   r   r   r  r   r   r   test_bug_8664  s    
$z LinprogCommonTests.test_bug_8664c              
   C   sx   t g d}t g dg dg}t ddg}g d}t|||tt|| j| jd}t|dd t||j	 |j
 d	S )
zv
        Test whether bug described at:
        https://github.com/scipy/scipy/issues/8973
        was fixed.
        )r   r   r   r   r1   )r   r   r   r   r   )r   r   r   r   r   r   r   )rj   rj   rj   r   r   r   r   N)r3   r<   r	   rU   rV   r   r   r0   r   r,   r+   r	  r   r   r   test_bug_8973  s    z LinprogCommonTests.test_bug_8973c              
   C   sX   t d}t dgg}t dg}d}t|||tt|| j| jd}t|dgdd dS )z
        Additional test for:
        https://github.com/scipy/scipy/issues/8973
        suggested in
        https://github.com/scipy/scipy/pull/8985
        review by @antonior92
        r   r   rj   r   r   r   N)	r3   r7   r<   r	   rU   rV   r   r   r0   r	  r   r   r   test_bug_8973_2  s    
z"LinprogCommonTests.test_bug_8973_2c              
   C   s   t d}t dgg}t dg}d}ddg}ddgddgg}ddg}dd	g}d
di}|| j t|||tt|| j|d}t	|ddgdd dS )zg
        Test for linprog docstring problem
        'disp'=True caused revised simplex failure
        r   r   rj   r1   r!   r`   r   r^   r   r   Tr   rM   r   r   N)
r3   r7   r<   updater   r	   rU   rV   r   r0   r  r   r   r   test_bug_10124  s    
z!LinprogCommonTests.test_bug_10124c                 C   s   t g dg dg dg dg dg dg}t g d}t jdd	t d
fdd}t 8}|td t|tt	||t
| j| jd}W d   n1 s0    Y  t|g ddd dS )zq
        Test for redundancy removal tolerance issue
        https://github.com/scipy/scipy/issues/10349
        )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )      rM         f   r   r   r!   N)ZaxisrB  r   )   \   r   r  r   rM   r  r   )r3   r<   Zconcatenater7   r   rC  r
   r	   rS   rT   rY   r   r   r0   )r   rU   rV   rG   rD  r   r   r   r   test_bug_10349  s    
$z!LinprogCommonTests.test_bug_10349darwinz0Failing on some local macOS builds, see gh-13846reasonc                 C   s  g d}g dg dg dg dg dg dg dg d	g d
g dg
}g d}i }| j dshddi}|| j t }|td tr|t |t	d |t	d |t	d |t	d |t
d t|tt||t| j |d}W d   n1 s0    Y  t|jd dS )zA
        Test that autoscale fixes poorly-scaled problem
        )       r  r  r  r  r  r  r  r  r  r  r  r  )r   r   r[  r[  r[  r[  r[  r[  r[  r[  r[  r[  r[  )r[  r[  r   r   r[  r[  r[  r[  r[  r[  r[  r[  r[  )r[  r[  r[  r[  r   r   r[  r[  r[  r[  r[  r[  r[  )r   r[  r   r[  r   r[  r   r[  r[  r[  r[  r[  r[  )r   r[  r   r[  r   r[  r[  r   r[  r[  r[  r[  r[  )r   r[  r[  r[  r[  r[  r[  r[  r   r[  r[  r[  r[  )r   r[  r[  r[  r[  r[  r[  r[  r[  r   r[  r[  r[  )r   r[  r   r[  r   r[  r[  r[  r[  r[  r   r[  r[  )r[  r[  r   r[  r   r[  r[  r[  r[  r[  r[  r   r[  )r[  r[  r   r[  r   r[  r[  r[  r[  r[  r[  r[  r   )
g     Ag      Ag     @Ag      A   Ar  r  r  r  r  r   	autoscaleTrT  rS  zdivide by zero encountered...zoverflow encountered...zinvalid value encountered...Ill-conditioned matrix...r   Nl )r   r5  r  r   r   rC  r
   rU  r   r   r   r	   rS   rT   rY   r   r+   )r   rG   rU   rV   r   rD  r   r   r   r   test_bug_10466  s<    
&z!LinprogCommonTests.test_bug_10466N)U__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r   r!  r%  r'  r(  r)  r*  r,  r6  r7  r;  rA  rE  rG  rJ  rR  rV  rW  rX  r\  rb  rc  rd  rf  ri  ro  rr  r}  r  r  r  r  r  r  r  r  r  r  r  r  r   markskipsysplatformr  r   r   r   r   r   /  s   
! &
								
7,)$r   c                   @   s   e Zd ZdZdS )LinprogSimplexTestsr   Nr  r  r  r   r   r   r   r   r  E  s   r  c                   @   s   e Zd ZdZdS )LinprogIPTestsr   Nr  r   r   r   r   r  I  s   r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	LinprogRSTestsr   c                 C   s   t d d S Nz Intermittent failure acceptable.r   r  r   r   r   r   ro  `  s    zLinprogRSTests.test_bug_5400c                 C   s   t d d S r  r  r   r   r   r   r  c  s    zLinprogRSTests.test_bug_8662c                 C   s   t d d S r  r  r   r   r   r   rR  f  s    z LinprogRSTests.test_network_flowN)r  r  r  r   ro  r  rR  r   r   r   r   r  M  s   r  c                   @   sz   e Zd Zdd Zejdddiddiddiddid	did
diddiddigdd Zdd Zdd Z	dd Z
dd ZdS )LinprogHiGHSTestsc              	   C   st   dd }t ddg}ddgddgddgg}g d}ttt||||| jd	 t|||| jd
}t|dddgd d S )Nc                 S   s   d S r   r   r   r   r   r   <lambda>m  r   z1LinprogHiGHSTests.test_callback.<locals>.<lambda>r`   r   r   r   r   r   r   r   r   r^   r   )r3   r<   r   NotImplementedErrorr	   r   r0   r   r   r   r   r   k  s    zLinprogHiGHSTests.test_callbackr   r   r1   r   r   Z
time_limitZdual_feasibility_toleranceZprimal_feasibility_toleranceZipm_optimality_toleranceZ!simplex_dual_edge_weight_strategyZekkic                    s*    fdd}|  j tt||d d S )Nc                    s   t d j| d d S )Nr   r   r   r   r   r   r   r     s    z7LinprogHiGHSTests.test_invalid_option_values.<locals>.fr   )r  r   r   r
   )r   r   r   r   r   r   test_invalid_option_valuesv  s    z,LinprogHiGHSTests.test_invalid_option_valuesc              
   C   s^   t ddgd }t ddgg}dg}t|||ttt| j| jd}t|j	dk| jdk d S )Nr   r1   rg  r   	highs-ipm)
r3   r<   r	   rU   rV   rY   r   r   r   Zcrossover_nitr   r   r   r   test_crossover  s    
z LinprogHiGHSTests.test_crossoverc           
   
      s  t dd\ t jjd}j\ fdd}t|d|jd}t|jj	|  fdd	}t|d|jd}t|j
j	|  fd
d}tjdd2 t|d|jd}d|t < W d    n1 s0    Y  t|jj	|  fdd}tjdd2 t|d|jd}	d|	t < W d    n1 s|0    Y  t|jj	|	 d S )Nr   r5   rg  c              	      s   t |  jdjS Nr   r	   r   r+   r,   )rU   rS   rV   rY   rG   r   r   r   f_bub  s    z/LinprogHiGHSTests.test_marginals.<locals>.f_bubz3-point)r   Zf0c              	      s   t  | jdjS r  r  r  )rU   rS   rT   rY   rG   r   r   r   f_beq  s    z/LinprogHiGHSTests.test_marginals.<locals>.f_beqc              	      s*   t | gj}t |jdjS r  r3   r<   rR   r	   r   r+   r,   rY   )rU   rS   rV   rT   rG   r   rX   r   r   f_lb  s    z.LinprogHiGHSTests.test_marginals.<locals>.f_lbignore)invalidc              	      s*   t | gj}t |jdjS r  r  r  )rU   rS   rV   rT   rG   rW   r   r   r   f_ub  s    z.LinprogHiGHSTests.test_marginals.<locals>.f_ub)rZ   r	   r   r   rR   r   r+   r   ineqlin	marginalseqlinr3   Zerrstateisfiniter4  upper)
r   r   r  Zdfdbubr  Zdfdbeqr  Zdfdlbr  Zdfdubr   )	rU   rS   rV   rT   rY   rG   rW   r   rX   r   test_marginals  s*    

00z LinprogHiGHSTests.test_marginalsc           	   
   C   sv   t dd\}}}}}}t||||||| j| jd}| |j|jj  |j|jj  |jj |j	j }t
|ddd d S )Nr   r  rg  r   -q=rh  )rZ   r	   r   r   rR   r  r  r  r  r4  r   )	r   rG   rS   rT   rU   rV   rY   r   Zresidr   r   r   test_dual_feasibility  s    
z'LinprogHiGHSTests.test_dual_feasibilityc              
   C   sX   t dd\}}}}}}t||||||| j| jd}t|jj|||j   dsTJ d S )Nr   r  rg  r   )	rZ   r	   r   r   r3   Zallcloser  r  r,   r   r   r   r   test_complementary_slackness  s
    
z.LinprogHiGHSTests.test_complementary_slacknessN)r  r  r  r   r   r  Zparametrizer  r  r  r  r  r   r   r   r   r  j  s"   

	1r  c                       s4   e Zd Zdd Zdd Zdd Z fddZ  ZS )	TestLinprogSimplexDefaultc                 C   s
   i | _ d S r   r   r   r   r   r   setup_method  s    z&TestLinprogSimplexDefault.setup_methodc                 C   s   t d d S NzSimplex fails on this problem.r  r   r   r   r   ro    s    z'TestLinprogSimplexDefault.test_bug_5400c                 C   s   t d d S r  r  r   r   r   r   test_bug_7237_low_tol  s    z/TestLinprogSimplexDefault.test_bug_7237_low_tolc                    sH   | j ddi tt t   W d    n1 s:0    Y  d S Nr  r  r   r  r   r   r
   superr  r   	__class__r   r   test_bug_8174_low_tol  s    z/TestLinprogSimplexDefault.test_bug_8174_low_tol)r  r  r  r  ro  r  r  __classcell__r   r   r  r   r    s   r  c                       s,   e Zd Zdd Zdd Z fddZ  ZS )TestLinprogSimplexBlandc                 C   s   ddi| _ d S )Nr?  Tr   r   r   r   r   r    s    z$TestLinprogSimplexBland.setup_methodc                 C   s   t d d S r  r  r   r   r   r   ro    s    z%TestLinprogSimplexBland.test_bug_5400c              	      sr   | j ddi ttD tt t   W d    n1 sF0    Y  W d    n1 sd0    Y  d S r  )	r   r  r   r   r*   r   r
   r  r  r   r  r   r   r    s    z-TestLinprogSimplexBland.test_bug_8174_low_tol)r  r  r  r  ro  r  r  r   r   r  r   r    s   r  c                       s   e Zd Zdd Zedjdk Zej	
dZejjeo8edd fdd	Z fd
dZdd Z fddZdd Zdd Z  ZS )TestLinprogSimplexNoPresolvec                 C   s   ddi| _ d S )Nr   Fr   r   r   r   r   r    s    z)TestLinprogSimplexNoPresolve.setup_methodr   r[   linuxz"Fails with warning on 32-bit linux)	conditionr  c                    s   t    d S r   )r  ro  r   r  r   r   ro    s    z*TestLinprogSimplexNoPresolve.test_bug_5400c                    sL   | j ddi tjtdd t  W  d    S 1 s>0    Y  d S )Nr  r  zlinprog status 4r   )r   r  r   r   r*   r  rr  r   r  r   r   test_bug_6139_low_tol  s    z2TestLinprogSimplexNoPresolve.test_bug_6139_low_tolc                 C   s   t d d S r  r  r   r   r   r   r    s    z2TestLinprogSimplexNoPresolve.test_bug_7237_low_tolc                    sH   | j ddi tt t   W d    n1 s:0    Y  d S r  r  r   r  r   r   r    s    z2TestLinprogSimplexNoPresolve.test_bug_8174_low_tolc                 C   s   t d d S Nz#Tests behavior specific to presolver  r   r   r   r   r6  &  s    zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_1c                 C   s   t d d S r  r  r   r   r   r   r7  )  s    zGTestLinprogSimplexNoPresolve.test_unbounded_no_nontrivial_constraints_2)r  r  r  r  r3   ZintpitemsizeZ	is_32_bitr  r  r5  Zis_linuxr   r  xfailro  r  r  r  r6  r7  r  r   r   r  r   r    s   	r  c                   @   s   e Zd ZddiZdS )TestLinprogIPDenserp   FNr  r  r  r   r   r   r   r   r  2  s   r  c                   @   s   e Zd ZdddZdS )TestLinprogIPSparseCholmodTrp   r   Nr  r   r   r   r   r  7  s   r  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestLinprogIPSparseUmfpackTFr  c                 C   s   t d d S )Nz0Autoscale doesn't fix everything, and that's OK.r  r   r   r   r   r  ?  s    z)TestLinprogIPSparseUmfpack.test_bug_10466c                 C   s   t d d S )Nz2Failing due to numerical issues on some platforms.r  r   r   r   r   rV  B  s    z=TestLinprogIPSparseUmfpack.test_network_flow_limited_capacityN)r  r  r  r   r  rV  r   r   r   r   r  <  s   
r  c                       s^   e Zd ZddddZejd fddZejjdd fd	d
Z	dd Z
dd Z  ZS )TestLinprogIPSparseTFrp   r   Zsym_posrThis test is sensitive to machine epsilon level perturbations in linear system solution in _linprog_ip._sym_solve.c                    s   t    d S r   r  rr  r   r  r   r   rr  I  s    z!TestLinprogIPSparse.test_bug_6139Fails with ATLAS, see gh-7877r  c                    s   t    d S r   r  r}  r   r  r   r   r}  O  s    z!TestLinprogIPSparse.test_bug_6690c           	         s   t d\}}}}d}t l}tr*|t |td |td  fdd jD }d|d< t|t	t
||| j|d	}W d    n1 s0    Y  t|d
d d S )Nr   r  zMatrix is exactly singularrT  c                    s   i | ]}| j | qS r   r   r   r   r   r   r   _  r   zLTestLinprogIPSparse.test_magic_square_sparse_no_presolve.<locals>.<dictcomp>Fr   r   r~  r   )rH   r   rU  rC  r   r   r
   r   r	   rS   rT   r   r0   )	r   rU   rV   rG   r  rY   rD  r   r   r   r   r   $test_magic_square_sparse_no_presolveT  s    
$z8TestLinprogIPSparse.test_magic_square_sparse_no_presolvec           
         s   t d\}}}}t x}|td |td  fdd jD }d}|D ]2}||d< t|tt||t j	|d}	t
|	d	d
 qLW d    n1 s0    Y  d S )Nr   rB  zInvalid permc_spec optionc                    s   i | ]}| j | qS r   r   r   r   r   r   r   l  r   zATestLinprogIPSparse.test_sparse_solve_options.<locals>.<dictcomp>)ZNATURALZMMD_ATAZMMD_AT_PLUS_AZCOLAMDr   
permc_specr   r~  r   )rH   r   rC  r
   r   r	   rS   rT   rY   r   r0   )
r   rU   rV   rG   r  rD  r   Zpermc_specsr  r   r   r   r   test_sparse_solve_optionsf  s    z-TestLinprogIPSparse.test_sparse_solve_options)r  r  r  r   r   r  xfail_on_32bitrr  r  r}  r  r  r  r   r   r  r   r  F  s   
r  c                       sT   e Zd ZdddZejd fddZdd Zejj	dd	 fd
dZ
  ZS )TestLinprogIPSparsePresolveT)rp   r   r  c                    s   t    d S r   r  r   r  r   r   rr  {  s    z)TestLinprogIPSparsePresolve.test_bug_6139c                 C   s   t d d S )Nz6_sparse_presolve=True incompatible with presolve=Falser  r   r   r   r   rd    s    zBTestLinprogIPSparsePresolve.test_enzo_example_c_with_infeasibilityr  r  c                    s   t    d S r   r  r   r  r   r   r}    s    z)TestLinprogIPSparsePresolve.test_bug_6690)r  r  r  r   r   r  r  rr  rd  r  r}  r  r   r   r  r   r  x  s   

r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestLinprogIPSpecificr   c                 C   s|   t rddd}ntr ddd}ndddd}tdd\}}}t|||| j|d}t|||| jd}t|j|jdd	d	d
 d S )NTr  Fr  rN   r   r   z(linprog default solver unexpected resultgV瞯<r$   )has_cholmodrU  rL   r	   r   r   r+   )r   r   rE   rF   rG   r  r  r   r   r   test_solver_select  s    
z(TestLinprogIPSpecific.test_solver_selectc                 C   s4   dg}dg}t ||| jdddd}t|dd d S )Nr1   r+  FT)r   r   r   r   )r	   r   r0   r   r   r   r   )test_unbounded_below_no_presolve_original  s    z?TestLinprogIPSpecific.test_unbounded_below_no_presolve_originalc                 C   s8   t dd\}}}t|||| jddid}t|dd d S )NrN   r   Tr   r   r   r   r   r   r   r   test_cholesky  s
    z#TestLinprogIPSpecific.test_choleskyc              	   C   s   t dd\}}}t N}|td |td |td t|||| jdddd}W d    n1 sj0    Y  t|dd	 d S )
NrN   rS  rT  r  T)ipr   r   r   r   )	rL   r   rC  r   r
   r   r	   r   r0   )r   rE   rF   rG   rD  r   r   r   r   test_alternate_initial_point  s    $z2TestLinprogIPSpecific.test_alternate_initial_pointc                 C   s   dg}dgdgg}ddg}dgdgdgg}g d}t  D}|t |td t|||||t| jd	d
id}W d    n1 s0    Y  t|j d d S )Nr!   r   r   r   rc   r_   r  rT  r   Fr   r   )	r   rC  r   r
   r	   rY   r   r   r   r  r   r   r   r    s    

$z#TestLinprogIPSpecific.test_bug_8664N)	r  r  r  r   r  r   r  r  r  r   r   r   r   r    s   	r  c                   @   sH   e Zd Zi Zdd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )TestLinprogRSCommonc                 C   s   t d d S r  r  r   r   r   r   rA    s    z%TestLinprogRSCommon.test_cyclic_blandc           	      C   sP   t  \}}}}}}}t|||||t| j| j|d	}t|||d t|jd d S Nr   r   x0r   r   rg   r	   rY   r   r   r0   r   r{   rF  r   r   r   "test_nontrivial_problem_with_guess  s    
z6TestLinprogRSCommon.test_nontrivial_problem_with_guessc           
      C   sX   t  \}}}}}}}g d}t||||||| j| j|d	}	t|	||d t|	jd d S )N)rj   rj   rk   rj   r  r   r   rg   r	   r   r   r0   r   r{   
r   rG   rS   rT   rU   rV   re   rf   rY   r   r   r   r   0test_nontrivial_problem_with_unbounded_variables  s    
zDTestLinprogRSCommon.test_nontrivial_problem_with_unbounded_variablesc           
      C   sX   t  \}}}}}}}g d}t||||||| j| j|d	}	t|	||d t|	jd d S )N)r+  r   Nrk   rY  g333333?r  r   r   r
  r  r   r   r   .test_nontrivial_problem_with_bounded_variables  s    
zBTestLinprogRSCommon.test_nontrivial_problem_with_bounded_variablesc           
      C   sp   t  \}}}}}}}dg}tg d}d}g d}t||||||| j| j|d	}	t|	||d t|	jd d S )Nr!   )gibl3g%G/?r   rY  g@Q$@)rj   r  rk   r  r  r   r   )	rg   r3   r<   r	   r   r   r0   r   r{   r  r   r   r   8test_nontrivial_problem_with_negative_unbounded_variable  s    
zLTestLinprogRSCommon.test_nontrivial_problem_with_negative_unbounded_variablec           
      C   sJ   t  \}}}}}}}g d}t|||||t| j| j|d	}	t|	jd d S N)r   r   r   rP   r  r^   rg   r	   rY   r   r   r   r   
r   rG   rS   rT   rU   rV   re   rf   Z	bad_guessr   r   r   r   &test_nontrivial_problem_with_bad_guess  s    
z:TestLinprogRSCommon.test_nontrivial_problem_with_bad_guessc           
      C   s   t d\}}}}tjj|j }t t}|td |td |t	 t
|||| jd}t
|||| j|jd}t
|| ||| j|jd}	W d    n1 s0    Y  t|dd t|jd t|	 t|	j|jk  d S )	Nr   rB  rI  )rU   rV   r   )rU   rV   r   r  r~  r   r   )rH   r3   r4   r?   r@   r   rC  r
   r   r   r	   r   r,   r0   r   r{   r   )
r   rE   rF   rG   r  rQ  rD  r   r  Zres3r   r   r   %test_redundant_constraints_with_guess  s    
8z9TestLinprogRSCommon.test_redundant_constraints_with_guessN)r  r  r  r   rA  r	  r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s   e Zd ZddiZdS )TestLinprogRSBlandpivotr?  Nr  r   r   r   r   r    s   r  c                   @   s   e Zd ZdZi Zdd ZdS )TestLinprogHiGHSSimplexDualzhighs-dsc                 C   s   t  \}}}}t||||| j| jd}t|jd td|jv  t|jdu tt	
|jdk tt	
|jdd |D k tt	
|jdd |D k dS )	zAThe scaled model should be optimal but unscaled model infeasible.)rS   rT   rY   r   r   r!   z5An optimal solution to the scaled model was found butNgưc                 S   s"   g | ]\}}|d u rt jn|qS r   r3   rQ   r   lur   r   r   
<listcomp>$  r   zCTestLinprogHiGHSSimplexDual.test_lad_regression.<locals>.<listcomp>c                 S   s$   g | ]\}}|d u rt j n|qS r   r  r  r   r   r   r  %  r   )rw   r	   r   r   r   r   r   r)   r,   r3   allr|   )r   rG   rS   rT   rv   r   r   r   r   test_lad_regression  s    
z/TestLinprogHiGHSSimplexDual.test_lad_regressionN)r  r  r  r   r   r  r   r   r   r   r    s   r  c                   @   s   e Zd ZdZi ZdS )TestLinprogHiGHSIPMr  N)r  r  r  r   r   r   r   r   r   r   -  s   r   c                   @   s&   e Zd ZddiZejZejZejZdS )AutoscaleTestsr  TN)r  r  r  r   r   rr  r}  r  r   r   r   r   r!  7  s   r!  c                   @   s   e Zd ZdZdd ZdS )TestAutoscaleIPr   c                 C   s   d| j d< t| S )Nr  r  )r   r!  rr  r   r   r   r   rr  B  s    
zTestAutoscaleIP.test_bug_6139N)r  r  r  r   rr  r   r   r   r   r"  ?  s   r"  c                   @   s   e Zd ZdZdS )TestAutoscaleSimplexr   Nr  r   r   r   r   r#  G  s   r#  c                   @   s    e Zd ZdZdd Zdd ZdS )TestAutoscaleRSr   c           	      C   sP   t  \}}}}}}}t|||||t| j| j|d	}t|||d t|jd d S r  r  rF  r   r   r   r	  N  s    
z2TestAutoscaleRS.test_nontrivial_problem_with_guessc           
      C   sJ   t  \}}}}}}}g d}t|||||t| j| j|d	}	t|	jd d S r  r  r  r   r   r   r  U  s    
z6TestAutoscaleRS.test_nontrivial_problem_with_bad_guessN)r  r  r  r   r	  r  r   r   r   r   r$  K  s   r$  c                   @   s2   e Zd ZdZeZejZejZej	Z	ej
ZejZdS )RRTestsr   N)r  r  r  r   r   ZLCTrE  Ztest_RR_infeasibilityr  r  rV  Z	test_NFLCr\  r   r   r   r   r%  b  s   r%  c                   @   s   e Zd ZddiZdS )	TestRRSVDr   ZSVDNr  r   r   r   r   r&  m  s   r&  c                   @   s   e Zd ZddiZdS )TestRRPivotr   r  Nr  r   r   r   r   r'  q  s   r'  c                   @   s   e Zd ZddiZdS )TestRRIDr   ZIDNr  r   r   r   r   r(  u  s   r(  )NNr#   r#   )r   )r   r[   r_   rh   )Nr  r  Znumpyr3   Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipy.optimizer	   r
   Zscipy.optimize._numdiffr   Zscipy.sparse.linalgr   Zscipy.linalgr   Zscipy.sparsero   rU  Zscikits.umfpackr   ImportErrorr  ZsksparseZsksparse.cholmodr   Zcholmodr   r   r   r"   r0   rH   rL   rZ   rg   rw   r   r   r   rS   rT   rU   rV   rY   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r   r   r   r   <module>   s    


  
B

#
           u-
2D?	
