
    bi                         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 Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Zy)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_arrayc                    | D ]$  }|D ]  }t        j                  ||k(        s #  y | j                  d   t         j                  j	                  |       cxk(  xr" t         j                  j	                  |      k(  S c S )zAChecks whether a matrix contains only independent rows of anotherFr   )npallshapelinalgmatrix_rank)ABrowArowBs       g/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test__remove_redundancy.pyredundancy_removedr      sv      	Dvvddl#	  771:..q1MRYY5J5J15MMMMM    c                   x    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)RRCommonTestsc                 L    t         j                  j                  d      | _        y )N  )r   randomdefault_rngrng)selfs    r   setup_methodzRRCommonTests.setup_method%   s    99((.r   c                     d\  }}| j                   j                  ||f      }| j                   j                  |      }| j                  ||      \  }}}}t        ||       t        ||       t	        |d       y )N
   r(   r   )r#   r!   rrr   r   	r$   mnA0b0A1b1statusmessages	            r   test_no_redundancyz RRCommonTests.test_no_redundancy(   si    1XX__aV$XX__Q"&''"b/BBBVQr   c                     t        j                  d      }d|dd d f<   | j                  j                  d      }| j	                  ||      \  }}}}t        |d       y N   r   r      )r   eyer#   r!   r)   r   r$   r   br/   r0   r1   r2   s          r   test_infeasible_zero_rowz&RRCommonTests.test_infeasible_zero_row1   sP    FF1I!Q$HHOOA"&''!Q-BVQr   c                    t        j                  d      }d|dd d f<   | j                  j                  d      }d|d<   | j	                  ||      \  }}}}t        |d       t        ||ddgd d f          t        ||ddg          y r5   )r   r8   r#   r!   r)   r   r   r9   s          r   test_remove_zero_rowz"RRCommonTests.test_remove_zero_row8   s    FF1I!Q$HHOOA!"&''!Q-BVQAq!faiL)Aq!fI&r   c                     d\  }}| j                   j                  ||f      }| j                   j                  |      }| j                  ||      \  }}}}t        |d       y )N   r(   r7   r#   r!   r)   r   r*   s	            r   test_infeasible_m_gt_nz$RRCommonTests.test_infeasible_m_gt_nB   sU    1XX__aV$XX__Q"&''"b/BVQr   c                     d\  }}| j                   j                  ||f      }| j                   j                  |      }d|dd d f   z  |dd d f<   | j                  ||      \  }}}}t        |d       y )Nr'   r7   rA   r*   s	            r   test_infeasible_m_eq_nz$RRCommonTests.test_infeasible_m_eq_nI   sn    1XX__aV$XX__Q2q5	M2q5	"&''"b/BVQr   c                 &   d\  }}| j                   j                  ||f      }| j                   j                  |      }t        j                  |dz
        j	                  |d d       |dd d f<   | j                  ||      \  }}}}t        |d       y )N	   r(   r   rE   r7   )r#   r!   r   arangedotr)   r   r*   s	            r   test_infeasible_m_lt_nz$RRCommonTests.test_infeasible_m_lt_nQ   s    1XX__aV$XX__QIIa!e$((CR12q5	"&''"b/BVQr   c                    t         j                  j                  d      }d\  }}|j                  ||f      }|j                  |      }t         j                  j	                  |d |d d f   |d |       }||d d d f   j                  |      ||d  | j                  ||      \  }}}	}
t        |	d       t        |j                  d   |       t        t         j                  j                  |      |       y )Ni  r?   r   )
r   r!   r"   r   solverK   r)   r   r   r   )r$   r#   r+   r,   r-   r.   xr/   r0   r1   r2   s              r   test_m_gt_nzRRCommonTests.test_m_gt_nY   s    ii##D)1ZZAZZ]IIOOBrr1uIr"1v.ABEq!12"&''"b/BVQRXXa[!$RYY**2.2r   c                    d\  }}t        j                  ||f      }d|d d df<   t        j                  |      }| j                  ||      \  }}}}t	        |d       t        ||ddd d f          t        ||d          y )Nr?   r   r   )r   zerosonesr)   r   r   r*   s	            r   test_m_gt_n_rank_deficientz(RRCommonTests.test_m_gt_n_rank_deficiente   s}    1XXq!f1a4WWQZ"&''"b/BVQBqsAvJ'BqE"r   c                    d\  }}| j                   j                  ||f      }| j                   j                  |      }t        j                  |dz
        j	                  |d d       |dd d f<   t        j                  |dz
        j	                  |d d       |d<   | j                  ||      \  }}}}t        |d       t        |j                  d   d       t        t        j                  j                  |      d       y )NrH   r   rE   r      )
r#   r!   r   rJ   rK   r)   r   r   r   r   r*   s	            r   test_m_lt_n_rank_deficientz(RRCommonTests.test_m_lt_n_rank_deficiento   s    1XX__aV$XX__QIIa!e$((CR12q5	1q5!%%b"g.2"&''"b/BVQRXXa[!$RYY**2.2r   c                 B   t        j                  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                  |j                  d         }| j	                  ||      \  }}}}t        t        ||             t        |d       y )N)   rY   r   r6   r   rE   r7      )r   rS   rR   r   r)   r   r   r   r9   s          r   test_dense1zRRCommonTests.test_dense1z   s    GGFO!RaR%!QR%!"cc'
!RaR%!QR%HHQWWQZ "&''!Q-B"2q)*VQr   c                     t        j                  d      }d|d<   d|dd d f<   t        j                  |j                  d         }| j	                  ||      \  }}}}t        t        ||             t        |d       y NrY   r   )rD   rE   rE   r   )r   r8   rR   r   r)   r   r   r   r9   s          r   test_dense2zRRCommonTests.test_dense2   sm    FF1I&	"a%HHQWWQZ "&''!Q-B"2q)*VQr   c                 @   t        j                  d      }d|d<   d|dd d f<   | j                  j                  |j                  d         }t        j
                  |d d       |d<   | j                  ||      \  }}}}t        t        ||             t        |d       y r]   )
r   r8   r#   r!   r   sumr)   r   r   r   r9   s          r   test_dense3zRRCommonTests.test_dense3   s    FF1I&	"a%HHOOAGGAJ'q"v""&''!Q-B"2q)*VQr   c                    t         j                  j                  d      }d\  }}d}|j                  ||f      }d||j                  ||f      |kD  <   t         j                  j	                  |      }t        j
                  |j                  d         }| j                  ||      \  }}	}
}t        |
d       t        |j                  d   |       t        t         j                  j	                  |      |       y )Ni  )r@      g?r   	r   r!   r"   r   r   rR   r   r)   r   r$   r#   r+   r,   pr   rankr:   r/   r0   r1   r2   s               r   test_m_gt_n_sparsez RRCommonTests.test_m_gt_n_sparse   s    ii##D)1JJ1v$%#**aV
q
 !yy$$Q'HHQWWQZ "&''!Q-BVQRXXa[$'RYY**2.5r   c                    t         j                  j                  d      }d\  }}d}|j                  ||f      }d||j                  ||f      |kD  <   t         j                  j	                  |      }t        j
                  |j                  d         }| j                  ||      \  }}	}
}t        |
d       t        |j                  d   |       t        t         j                  j	                  |      |       y )Nr    )r@   2   g?r   rd   re   s               r   test_m_lt_n_sparsez RRCommonTests.test_m_lt_n_sparse   s    ii##D)1JJ1v$%#**aV
q
 !yy$$Q'HHQWWQZ "&''!Q-BVQRXXa[$'RYY**2.5r   c                    t         j                  j                  d      }d\  }}d}|j                  ||f      }d||j                  ||f      |kD  <   t         j                  j	                  |      }t        j
                  |j                  d         }| j                  ||      \  }}	}
}t        |
d       t        |j                  d   |       t        t         j                  j	                  |      |       y )Nr    )d   rm   g{Gz?r   rd   re   s               r   test_m_eq_n_sparsez RRCommonTests.test_m_eq_n_sparse   s    ii##D)1JJ1v$%#**aV
q
 !yy$$Q'HHQWWQZ "&''!Q-BVQRXXa[$'RYY**2.5r   c                     t        d      \  }}}}}| j                  ||      \  }}}}	t        |d       t        |j                  d   d       t        t        j
                  j                  |      d       y )Nr6   r      r   r)   r   r   r   r   r   
r$   r   r:   cnumbers_r/   r0   r1   r2   s
             r   test_magic_squarezRRCommonTests.test_magic_square   c    *1o1a!"&''!Q-BVQRXXa["%RYY**2.3r   c                     t        d      \  }}}}}| j                  ||      \  }}}}	t        |d       t        |j                  d   d       t        t        j
                  j                  |      d       y )NrZ   r   '   rq   rr   s
             r   test_magic_square2z RRCommonTests.test_magic_square2   rw   r   N)__name__
__module____qualname__r%   r3   r;   r=   rB   rF   rL   rP   rT   rW   r[   r^   ra   rh   rk   rn   rv   rz    r   r   r   r   $   s\    /  '   
3#	3   66644r   r   c                       e Zd Zd Zy)	TestRRSVDc                     t        ||      S Nr   r$   r   r:   s      r   r)   zTestRRSVD.rr   s    %a++r   Nr{   r|   r}   r)   r~   r   r   r   r      s    ,r   r   c                       e Zd Zd Zy)TestRRPivotDensec                     t        ||      S r   r
   r   s      r   r)   zTestRRPivotDense.rr   s    -a33r   Nr   r~   r   r   r   r      s    4r   r   c                       e Zd Zd Zy)TestRRIDc                     t        ||      S r   r   r   s      r   r)   zTestRRID.rr   s    $Q**r   Nr   r~   r   r   r   r      s    +r   r   c                       e Zd Zd Zy)TestRRPivotSparsec                 b    t        t        |      |      }|\  }}}}|j                         |||fS r   )r   r   toarray)r$   r   r:   rr_resr/   r0   r1   r2   s           r   r)   zTestRRPivotSparse.rr   s5    01qA"(Bzz|R00r   Nr   r~   r   r   r   r      s    1r   r   )__doc__numpyr   numpy.testingr   r   r   test_linprogr   !scipy.optimize._remove_redundancyr	   r   r   r   scipy.sparser   r   r   r   r   r   r   r~   r   r   <module>r      sp     
 ' D L M C "	Ni4 i4X, ,
4} 4
+} +
1 1r   