o
    Ö­j�  ã                   @   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   úi/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test__remove_redundancy.pyÚsetup_module   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_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   r2   r   r"   r#   r   r   r3   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!   r1   ©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    r1   éþÿÿÿéÿÿÿÿr9   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<   r1   )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ð  r7   r   )r   r   r   r"   r   ÚsolverA   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 )Nr7   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@   rA   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)é   rK   r   r0   r   r<   r1   é   )r   rG   rF   r   r#   r   r   r   r3   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 ©NrK   r   )r;   r<   r<   r   )r   r2   rF   r   r#   r   r   r   r3   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 rN   )
r   r2   r   r"   r   Úsumr#   r   r   r   r3   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Ý  )r8   é   gš™™™™™¹?r   ©
r   r   r   r"   r   r   rF   r   r#   r   ©r%   r&   r'   Úpr   Úrankr4   r*   r+   r,   r-   r   r   r   Útest_m_gt_n_sparse›   ó   
z RRCommonTests.test_m_gt_n_sparsec                 C   rR   )Nr   )r8   é2   gš™™™™™©?r   rT   rU   r   r   r   Útest_m_lt_n_sparse¨   rY   z RRCommonTests.test_m_lt_n_sparsec                 C   rR   )Nr   )éd   r\   g{®Gáz„?r   rT   rU   r   r   r   Útest_m_eq_n_sparseµ   rY   z RRCommonTests.test_m_eq_n_sparsec           
      C   óV   t dƒ\}}}}}|  ||¡\}}}}	t|dƒ t|jd dƒ ttj |¡dƒ d S )Nr0   r   é   ©r   r#   r   r   r   r   r   ©
r%   r   r4   ÚcÚnumbersÚ_r*   r+   r,   r-   r   r   r   Útest_magic_squareÂ   ó
   
zRRCommonTests.test_magic_squarec           
      C   r^   )NrL   r   é'   r`   ra   r   r   r   Útest_magic_square2É   rf   z RRCommonTests.test_magic_square2N)Ú__name__Ú
__module__Ú__qualname__r.   r5   r6   r:   r=   rB   rE   rH   rJ   rM   rO   rQ   rX   r[   r]   re   rh   r   r   r   r   r   (   s$    	

	
r   c                   @   ó   e Zd Zdd„ ZdS )Ú	TestRRSVDc                 C   ó
   t ||ƒS ©Nr   ©r%   r   r4   r   r   r   r#   Ò   ó   
zTestRRSVD.rrN©ri   rj   rk   r#   r   r   r   r   rm   Ñ   ó    rm   c                   @   rl   )ÚTestRRPivotDensec                 C   rn   ro   r	   rp   r   r   r   r#   ×   rq   zTestRRPivotDense.rrNrr   r   r   r   r   rt   Ö   rs   rt   c                   @   rl   )ÚTestRRIDc                 C   rn   ro   r   rp   r   r   r   r#   Ü   rq   zTestRRID.rrNrr   r   r   r   r   ru   Û   rs   ru   c                   @   rl   )ÚTestRRPivotSparsec                 C   s*   t t|ƒ|ƒ}|\}}}}| ¡ |||fS ro   )r   r   Útoarray)r%   r   r4   Úrr_resr*   r+   r,   r-   r   r   r   r#   á   s   zTestRRPivotSparse.rrNrr   r   r   r   r   rv   à   rs   rv   )Ú__doc__Únumpyr   Únumpy.testingr   r   r   Útest_linprogr   Ú!scipy.optimize._remove_redundancyr   r
   r   r   Úscipy.sparser   r   r   r   rm   rt   ru   rv   r   r   r   r   Ú<module>   s"     *