U
    »mœdm  ã                   @   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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   úe/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test__remove_redundancy.pyÚsetup_module   s    r   çH¯¼šò×z>c                 C   sR   t | jƒ t| jdƒ |d k	r2t| j|d||d� |d k	rNt| j|d||d� d S )Nr   z*converged to an unexpected objective value)Úerr_msgÚrtolÚatolz#converged to an unexpected solution)r   Úsuccessr   Ústatusr   ZfunÚx)ÚresZdesired_funZ	desired_xr   r   r   r   r   Ú_assert_success   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_removed7   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Úb1r   Úmessager   r   r   Útest_no_redundancyD   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#   Úbr1   r2   r   r3   r   r   r   Útest_infeasible_zero_rowM   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 r5   )r   r8   r   r)   r*   r   r   r9   r   r   r   Útest_remove_zero_rowT   s    

z"RRCommonTests.test_remove_zero_rowc           	      C   sD   d\}}t j ||¡}t j |¡}|  ||¡\}}}}t|dƒ d S )N©é   r(   r7   ©r   r   r)   r*   r   r+   r   r   r   Útest_infeasible_m_gt_n^   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'   r7   éþÿÿÿéÿÿÿÿr?   r+   r   r   r   Útest_infeasible_m_eq_ne   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   rB   r7   )r   r   r)   ÚarangeÚdotr*   r   r+   r   r   r   Útest_infeasible_m_lt_nm   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ð  r=   r   )r   r   r   r)   r!   ZsolverG   r*   r   r    r"   )
r,   r-   r.   r/   r0   r   r1   r2   r   r3   r   r   r   Útest_m_gt_nu   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 )Nr=   r   r   )r   ÚzerosÚonesr*   r   r   r+   r   r   r   Útest_m_gt_n_rank_deficient�   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 )NrD   r   rB   r   é   )
r   r   r)   rF   rG   r*   r   r    r!   r"   r+   r   r   r   Útest_m_lt_n_rank_deficient‹   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)é   rO   r   r6   r   rB   r7   é   )r   rK   rJ   r    r*   r   r%   r   r9   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 ©NrO   r   )rA   rB   rB   r   )r   r8   rJ   r    r*   r   r%   r   r9   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 rR   )
r   r8   r   r)   r    Úsumr*   r   r%   r   r9   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Ý  )r>   é   gš™™™™™¹?r   ©
r   r   r   r)   r!   r"   rJ   r    r*   r   ©r,   r-   r.   Úpr#   Zrankr:   r1   r2   r   r3   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   )r>   é2   gš™™™™™©?r   rW   rX   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   r]   g{®Gáz„?r   rW   rX   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 )Nr6   r   é   ©r   r*   r   r    r   r!   r"   ©
r,   r#   r:   ÚcÚnumbersÚ_r1   r2   r   r3   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 )NrP   r   é'   r`   ra   r   r   r   Útest_magic_square2ä   s
    
z RRCommonTests.test_magic_square2N)Ú__name__Ú
__module__Ú__qualname__r4   r;   r<   r@   rC   rH   rI   rL   rN   rQ   rS   rU   rZ   r\   r^   re   rg   r   r   r   r   r&   C   s"   	

	
r&   c                   @   s   e Zd Zdd„ ZdS )Ú	TestRRSVDc                 C   s
   t ||ƒS ©Nr   ©r,   r#   r:   r   r   r   r*   í   s    zTestRRSVD.rrN©rh   ri   rj   r*   r   r   r   r   rk   ì   s   rk   c                   @   s   e Zd Zdd„ ZdS )ÚTestRRPivotDensec                 C   s
   t ||ƒS rl   r	   rm   r   r   r   r*   ò   s    zTestRRPivotDense.rrNrn   r   r   r   r   ro   ñ   s   ro   c                   @   s   e Zd Zdd„ ZdS )ÚTestRRIDc                 C   s
   t ||ƒS rl   r   rm   r   r   r   r*   ÷   s    zTestRRID.rrNrn   r   r   r   r   rp   ö   s   rp   c                   @   s   e Zd Zdd„ ZdS )ÚTestRRPivotSparsec                 C   s*   t t|ƒ|ƒ}|\}}}}| ¡ |||fS rl   )r   r   Ztoarray)r,   r#   r:   Zrr_resr1   r2   r   r3   r   r   r   r*   ü   s    zTestRRPivotSparse.rrNrn   r   r   r   r   rq   û   s   rq   )NNr   r   )Ú__doc__Únumpyr   Znumpy.testingr   r   r   Ztest_linprogr   Z!scipy.optimize._remove_redundancyr   r
   r   r   Zscipy.sparser   r   r   r%   r&   rk   ro   rp   rq   r   r   r   r   Ú<module>   s*       û
 *