o
    ×Ágm  ã                   @   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   új/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/optimize/tests/test__remove_redundancy.pyÚsetup_module   s   r   çH¯¼šò×z>c                 C   sV   t | jƒ t| jdƒ |d urt| j|d||d |d ur)t| j|d||d d S d S )Nr   z*converged to an unexpected objective value)Úerr_msgÚrtolÚatolz#converged to an unexpected solution)r   Úsuccessr   Ústatusr   ÚfunÚx)ÚresÚdesired_funÚ	desired_xr   r   r   r   r   Ú_assert_success   s&   
	û
ûÿr!   c                 C   sZ   | D ]}|D ]}t  ||k¡r nq dS q| jd t j | ¡  ko*t j |¡kS   S )zAChecks whether a matrix contains only independent rows of anotherFr   )r   ÚallÚshapeÚlinalgÚmatrix_rank)ÚAÚBÚrowAÚ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   ©r1   r&   Úbr6   r7   r   r8   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 r:   )r   r=   r   r.   r/   r   r   r>   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-   r<   ©r   r   r.   r/   r   r0   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,   r<   éþÿÿÿéÿÿÿÿrD   r0   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   rG   r<   )r   r   r.   ÚarangeÚdotr/   r   r0   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ð  rB   r   )r   r   r   r.   r$   ÚsolverL   r/   r   r#   r%   )
r1   r2   r3   r4   r5   r   r6   r7   r   r8   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 )NrB   r   r   )r   ÚzerosÚonesr/   r   r   r0   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 )NrI   r   rG   r   é   )
r   r   r.   rK   rL   r/   r   r#   r$   r%   r0   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)é   rU   r   r;   r   rG   r<   é   )r   rQ   rP   r#   r/   r   r*   r   r>   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 ©NrU   r   )rF   rG   rG   r   )r   r=   rP   r#   r/   r   r*   r   r>   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 rX   )
r   r=   r   r.   r#   Úsumr/   r   r*   r   r>   r   r   r   Útest_dense3¬   s   
zRRCommonTests.test_dense3c                 C   óœ   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Ý  )rC   é   gš™™™™™¹?r   ©
r   r   r   r.   r$   r%   rP   r#   r/   r   ©r1   r2   r3   Úpr&   Úrankr?   r6   r7   r   r8   r   r   r   Útest_m_gt_n_sparse¶   ó   
z RRCommonTests.test_m_gt_n_sparsec                 C   r\   )Nr   )rC   é2   gš™™™™™©?r   r^   r_   r   r   r   Útest_m_lt_n_sparseÃ   rc   z RRCommonTests.test_m_lt_n_sparsec                 C   r\   )Nr   )éd   rf   g{®Gáz„?r   r^   r_   r   r   r   Útest_m_eq_n_sparseÐ   rc   z RRCommonTests.test_m_eq_n_sparsec           
      C   óV   t dƒ\}}}}}|  ||¡\}}}}	t|dƒ t|jd dƒ ttj |¡dƒ d S )Nr;   r   é   ©r   r/   r   r#   r   r$   r%   ©
r1   r&   r?   ÚcÚnumbersÚ_r6   r7   r   r8   r   r   r   Útest_magic_squareÝ   ó
   
zRRCommonTests.test_magic_squarec           
      C   rh   )NrV   r   é'   rj   rk   r   r   r   Útest_magic_square2ä   rp   z RRCommonTests.test_magic_square2N)Ú__name__Ú
__module__Ú__qualname__r9   r@   rA   rE   rH   rM   rO   rR   rT   rW   rY   r[   rb   re   rg   ro   rr   r   r   r   r   r+   C   s$    	

	
r+   c                   @   ó   e Zd Zdd„ ZdS )Ú	TestRRSVDc                 C   ó
   t ||ƒS ©Nr   ©r1   r&   r?   r   r   r   r/   í   ó   
zTestRRSVD.rrN©rs   rt   ru   r/   r   r   r   r   rw   ì   ó    rw   c                   @   rv   )ÚTestRRPivotDensec                 C   rx   ry   r	   rz   r   r   r   r/   ò   r{   zTestRRPivotDense.rrNr|   r   r   r   r   r~   ñ   r}   r~   c                   @   rv   )ÚTestRRIDc                 C   rx   ry   r   rz   r   r   r   r/   ÷   r{   zTestRRID.rrNr|   r   r   r   r   r   ö   r}   r   c                   @   rv   )ÚTestRRPivotSparsec                 C   s*   t t|ƒ|ƒ}|\}}}}| ¡ |||fS ry   )r   r   Útoarray)r1   r&   r?   Úrr_resr6   r7   r   r8   r   r   r   r/   ü   s   zTestRRPivotSparse.rrNr|   r   r   r   r   r€   û   r}   r€   )NNr   r   )Ú__doc__Únumpyr   Únumpy.testingr   r   r   Útest_linprogr   Ú!scipy.optimize._remove_redundancyr   r
   r   r   Úscipy.sparser   r   r!   r*   r+   rw   r~   r   r€   r   r   r   r   Ú<module>   s,    
û *