o
    i                     @   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   f/home/kim/smarthome/.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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      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      
z RRCommonTests.test_m_gt_n_sparsec                 C   rO   )Nr   )r6   2   g?r   rQ   rR   r   r   r   test_m_lt_n_sparse   rU   z RRCommonTests.test_m_lt_n_sparsec                 C   rO   )Nr   )d   rX   g{Gz?r   rQ   rR   r   r   r   test_m_eq_n_sparse   rU   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   
r#   r   r2   cnumbers_r(   r)   r*   r+   r   r   r   test_magic_square   
   
zRRCommonTests.test_magic_squarec           
      C   rZ   )NrI   r   '   r\   r]   r   r   r   test_magic_square2   rb   z RRCommonTests.test_magic_square2N)__name__
__module____qualname__r,   r3   r4   r8   r;   r@   rB   rE   rG   rJ   rL   rN   rT   rW   rY   ra   rd   r   r   r   r   r   (   s$    	

	
r   c                   @      e Zd Zdd ZdS )	TestRRSVDc                 C   
   t ||S Nr   r#   r   r2   r   r   r   r!         
zTestRRSVD.rrNre   rf   rg   r!   r   r   r   r   ri          ri   c                   @   rh   )TestRRPivotDensec                 C   rj   rk   r	   rl   r   r   r   r!      rm   zTestRRPivotDense.rrNrn   r   r   r   r   rp      ro   rp   c                   @   rh   )TestRRIDc                 C   rj   rk   r   rl   r   r   r   r!      rm   zTestRRID.rrNrn   r   r   r   r   rq      ro   rq   c                   @   rh   )TestRRPivotSparsec                 C   s*   t t||}|\}}}}| |||fS rk   )r   r   Ztoarray)r#   r   r2   Zrr_resr(   r)   r*   r+   r   r   r   r!      s   zTestRRPivotSparse.rrNrn   r   r   r   r   rr      ro   rr   )__doc__numpyr   Znumpy.testingr   r   r   Ztest_linprogr   Z!scipy.optimize._remove_redundancyr   r
   r   r   Zscipy.sparser   r   r   r   ri   rp   rq   rr   r   r   r   r   <module>   s"     *