a
    Re                     @   s   d Z ddlZddlmZ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	mZ dd
lmZ dd Zdd ZG dd dZG dd deZG dd deZG dd deZG dd deZdS )z9
Unit test for Linear Programming via Simplex Algorithm.
    N)assert_assert_allcloseassert_equal   )magic_square_remove_redundancy_svd_remove_redundancy_pivot_dense)_remove_redundancy_pivot_sparse_remove_redundancy_id)
csc_matrixc                   C   s   t jd d S )N  )nprandomseed r   r   `/var/www/sunrise/env/lib/python3.9/site-packages/scipy/optimize/tests/test__remove_redundancy.pysetup_module   s    r   c                 C   sZ   | D ]&}|D ]}t ||kr qq dS q| jd t j|   koTt j|kS   S )zAChecks whether a matrix contains only independent rows of anotherFr   )r   allshapelinalgmatrix_rank)ABZrowAZrowBr   r   r   redundancy_removed   s    r   c                   @   s   e 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#S )$RRCommonTestsc           	      C   sX   d\}}t j||}t j|}| ||\}}}}t|| t|| t|d d S )N
   r   r   )r   r   randrrr   r   	selfmnA0b0A1b1statusmessager   r   r   test_no_redundancy)   s    

z RRCommonTests.test_no_redundancyc                 C   sH   t d}d|dd d f< t jd}| ||\}}}}t|d d S N   r   r      )r   eyer   r    r!   r   r#   r   br(   r)   r*   r+   r   r   r   test_infeasible_zero_row2   s
    
z&RRCommonTests.test_infeasible_zero_rowc                 C   s|   t d}d|dd d f< t jd}d|d< | ||\}}}}t|d t||ddgd d f  t||ddg  d S r-   )r   r0   r   r    r!   r   r   r1   r   r   r   test_remove_zero_row9   s    

z"RRCommonTests.test_remove_zero_rowc           	      C   sD   d\}}t j||}t j|}| ||\}}}}t|d d S )N   r   r/   r   r   r    r!   r   r"   r   r   r   test_infeasible_m_gt_nC   s
    z$RRCommonTests.test_infeasible_m_gt_nc           	      C   sd   d\}}t j||}t j|}d|dd d f  |dd d f< | ||\}}}}t|d d S )Nr   r/   r7   r"   r   r   r   test_infeasible_m_eq_nJ   s     z$RRCommonTests.test_infeasible_m_eq_nc           	      C   sl   d\}}t j||}t j|}t |d |d d |dd d f< | ||\}}}}t|d d S )N	   r   r   r:   r/   )r   r   r    arangedotr!   r   r"   r   r   r   test_infeasible_m_lt_nR   s    (z$RRCommonTests.test_infeasible_m_lt_nc           
      C   s   t jd d\}}t j||}t j|}t j|d |d d f |d | }||d d d f |||d < | ||\}}}}	t|d t|j	d | tt j
|| d S )Ni  r5   r   )r   r   r   r    r   Zsolver?   r!   r   r   r   )
r#   r$   r%   r&   r'   xr(   r)   r*   r+   r   r   r   test_m_gt_nZ   s    &"
zRRCommonTests.test_m_gt_nc           	      C   sz   d\}}t ||f}d|d d df< t |}| ||\}}}}t|d t||ddd d f  t||d  d S )Nr5   r   r   )r   zerosonesr!   r   r   r"   r   r   r   test_m_gt_n_rank_deficientf   s    

z(RRCommonTests.test_m_gt_n_rank_deficientc           	      C   s   d\}}t j||}t j|}t |d |d d |dd d f< t |d |d d |d< | ||\}}}}t|d t|jd d tt j	|d d S )Nr<   r   r:   r      )
r   r   r    r>   r?   r!   r   r   r   r   r"   r   r   r   test_m_lt_n_rank_deficientp   s    ( 
z(RRCommonTests.test_m_lt_n_rank_deficientc                 C   s   t d}d|dd df< d|ddd f< d|dd d d df< d|dd df< d|ddd f< t |jd }| ||\}}}}tt|| t|d d S )N)   rH   r   r.   r   r:   r/      )r   rD   rC   r   r!   r   r   r   r1   r   r   r   test_dense1{   s    
zRRCommonTests.test_dense1c                 C   sb   t d}d|d< d|dd d f< t |jd }| ||\}}}}tt|| t|d d S NrH   r   )r9   r:   r:   r   )r   r0   rC   r   r!   r   r   r   r1   r   r   r   test_dense2   s    
zRRCommonTests.test_dense2c                 C   sz   t d}d|d< d|dd d f< t j|jd }t |d d |d< | ||\}}}}tt|| t	|d d S rK   )
r   r0   r   r    r   sumr!   r   r   r   r1   r   r   r   test_dense3   s    
zRRCommonTests.test_dense3c                 C   s   t jd d\}}d}t j||}d|t j|||k< t j|}t |jd }| ||\}}}	}
t	|	d t	|jd | t	t j|| d S )Ni  )r6      g?r   
r   r   r   r    r   r   rC   r   r!   r   r#   r$   r%   pr   Zrankr2   r(   r)   r*   r+   r   r   r   test_m_gt_n_sparse   s    
z RRCommonTests.test_m_gt_n_sparsec                 C   s   t jd d\}}d}t j||}d|t j|||k< t j|}t |jd }| ||\}}}	}
t	|	d t	|jd | t	t j|| d S )Nr   )r6   2   g?r   rP   rQ   r   r   r   test_m_lt_n_sparse   s    
z RRCommonTests.test_m_lt_n_sparsec                 C   s   t jd d\}}d}t j||}d|t j|||k< t j|}t |jd }| ||\}}}	}
t	|	d t	|jd | t	t j|| d S )Nr   )d   rV   g{Gz?r   rP   rQ   r   r   r   test_m_eq_n_sparse   s    
z RRCommonTests.test_m_eq_n_sparsec           
      C   sV   t d\}}}}}| ||\}}}}	t|d t|jd d ttj|d d S )Nr.   r      r   r!   r   r   r   r   r   
r#   r   r2   cZnumbers_r(   r)   r*   r+   r   r   r   test_magic_square   s
    
zRRCommonTests.test_magic_squarec           
      C   sV   t d\}}}}}| ||\}}}}	t|d t|jd d ttj|d d S )NrI   r   '   rY   rZ   r   r   r   test_magic_square2   s
    
z RRCommonTests.test_magic_square2N)__name__
__module____qualname__r,   r3   r4   r8   r;   r@   rB   rE   rG   rJ   rL   rN   rS   rU   rW   r]   r_   r   r   r   r   r   (   s"   	

	
r   c                   @   s   e Zd Zdd ZdS )	TestRRSVDc                 C   s
   t ||S Nr   r#   r   r2   r   r   r   r!      s    zTestRRSVD.rrNr`   ra   rb   r!   r   r   r   r   rc      s   rc   c                   @   s   e Zd Zdd ZdS )TestRRPivotDensec                 C   s
   t ||S rd   r	   re   r   r   r   r!      s    zTestRRPivotDense.rrNrf   r   r   r   r   rg      s   rg   c                   @   s   e Zd Zdd ZdS )TestRRIDc                 C   s
   t ||S rd   r   re   r   r   r   r!      s    zTestRRID.rrNrf   r   r   r   r   rh      s   rh   c                   @   s   e Zd Zdd ZdS )TestRRPivotSparsec                 C   s*   t t||}|\}}}}| |||fS rd   )r   r   Ztoarray)r#   r   r2   Zrr_resr(   r)   r*   r+   r   r   r   r!      s    zTestRRPivotSparse.rrNrf   r   r   r   r   ri      s   ri   )__doc__numpyr   Znumpy.testingr   r   r   Ztest_linprogr   Z!scipy.optimize._remove_redundancyr   r
   r   r   Zscipy.sparser   r   r   r   rc   rg   rh   ri   r   r   r   r   <module>   s     *