o
    h                     @   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/vscode/kcb/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{Gz?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"     *