U
    9%em                     @   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   k/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/scipy/optimize/tests/test__remove_redundancy.pysetup_module   s    r   Hz>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{Gz?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*       
 *