U
    ?hb+  γ                   @   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mZ ddlmZ ddlm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 )"z9
Unit test for Linear Programming via Simplex Algorithm.
ι    N)Ϊassert_Ϊassert_allcloseΪassert_equal)Ϊraises)Ϊ_clean_inputsΪ
_LPProblem)Ϊdeepcopy)Ϊdatec                  C   sͺ   t ddggdgdggdgtj tjfd} t| }t|  t| j|jkd t| j|jkd t| j|jkd t| j	|j	kd t| j
|j
kd t| j|jkd d	S )
zΊ
    Test for ensuring that no objects referred to by `lp` attributes,
    `c`, `A_ub`, `b_ub`, `A_eq`, `b_eq`, `bounds`, have been modified
    by `_clean_inputs` as a side effect.
    ι   ©ΪcΪA_ubΪb_ubΪA_eqΪb_eqΪboundsϊc modified by _clean_inputsϊA_ub modified by _clean_inputsϊb_ub modified by _clean_inputsϊA_eq modified by _clean_inputsϊb_eq modified by _clean_inputsϊ bounds modified by _clean_inputsN)r   ΪnpΪinfr   r   r   r   r   r   r   r   r   ©ΪlpZlp_copy© r   ϊa/var/www/html/venv/lib/python3.8/site-packages/scipy/optimize/tests/test__linprog_clean_inputs.pyΪtest_aliasing   s     ϊr   c                  C   sΰ   t t ddg‘t ddgddgg‘t dgdgg‘t ddgg‘t dg‘tj tjfdgd} t| }t|  t| j|jdd t| j|jdd t| j	|j	dd t| j
|j
d	d t| j|jd
d t| j|jkd dS )z3
    Similar purpose as `test_aliasing` above.
    r
   ι   ©Nr
   r   r   )Ϊerr_msgr   r   r   r   r   N)r   r   Ϊarrayr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ϊtest_aliasing2&   s     
ϊr#   c                  C   s  ddg} t  ddgddgg‘}t  ddg‘}t  ddgddgg‘}t  ddg‘}ttt ttttd d tttt| |d tttt| |d d tttt| |d tttt| d |d tttt| |d tttt| |d d tttt| |d	 tttt| d |d d S )
Nr
   r   ©r   )r   r   ©r   r   r   )r   r   )r   r   ©r   r   r   )r   r   )r   r"   Ϊassert_raisesΪ	TypeErrorr   r   Ϊ
ValueError)r   r   r   r   r   r   r   r   Ϊtest_missing_inputs>   s    
r*   c                  C   s¬   ddddg} t j dd‘}ddgddgg}t j ddd‘}tttt||| d tttt| || d tttt| ||d tttt| || d tttt| ||d d S )Nr
   r   ι   ι   r%   r&   ©r   ΪrandomΪrandr'   r)   r   r   )ΪcbΪAZbad2DZbad3Dr   r   r   Ϊtest_too_many_dimensionsQ   s    r2   c                  C   sN   t j dd‘ ‘ } t j d‘}tttt|| |d tttt|| |d d S )Nr,   r%   r&   )r   r.   r/   Zravelr'   r)   r   r   )Ϊbadr0   r   r   r   Ϊtest_too_few_dimensions]   s    r4   c                  C   sό   d} d}ddddg}t j | |‘}t j | |d ‘}t j | ‘}t j | d ‘}dg|d  }tttt|||d tttt|||d tttt|||d tttt|||d tttt||d tttt|ddgddgddgdd	d
ggd d S )Nr   r,   r
   r+   ©r   r
   r%   r&   )r   r   ι   ι   r-   )ΪmΪnr   ZAgoodZAbadZbgoodZbbadZ	boundsbadr   r   r   Ϊtest_inconsistent_dimensionsd   s    r:   c               	   C   s~  t ddgt ddgddgg‘t ddg‘t ddgddgg‘t ddg‘dgd} d}ttt| j|d ttt| j|d ttt| j|d ttt| j|d	 ttt| j|d
 ttt| j|d ttt| jdd ttt| jdgd ttt| jdgd ttt| jdgd ttt| jddgd ttt| jdtdddfgd ttt| jddgggd d S )Nr
   r   r5   r   Zhellor$   ©r   ©r   ©r   ©r   ©r   Ϊhi)r
   Ϊ ©r
   r   iδ  ι   )	r   r   r"   r'   r(   r   Ϊ_replacer)   r	   )r   r3   r   r   r   Ϊtest_type_errorsv   s,    ϊ"rE   c               	   C   s6  t ddgt ddgddgg‘t ddg‘t ddgddgg‘t ddg‘dgd} ttt| jdd gd ttt| jtjdgd ttt| jdtj gd ttt| jtjdgd ttt| jddgd dggd ttt| jtjdgd ttt| jddgdtj ggd	 ttt| jdtjgd
 d S )Nr
   r   r5   r   r   r$   r;   r<   r=   r>   )	r   r   r"   r'   r)   r   rD   r   Ϊnan©r   r   r   r   Ϊtest_non_finite_errors   s     ϊ $rH   c                  C   s  t ddgddgddggddgddgddggddgd d} t| }t|jt | j‘ t|jt | j‘ t|jt | j‘ t|jt | j‘ t|j	t | j	‘ t
|jdtjfgd  t|jjdkd t|jjdkd t|jjdkd t|jjdkd t|j	jdkd d S )Nr
   r   r   r   ©r   rA   )r   r   )r   r   r   r   r   r"   r   r   r   r   r   r   r   r   Ϊshape©r   Z
lp_cleanedr   r   r   Ϊtest__clean_inputs1₯   s(    ϊ	rL   c                  C   sτ   t ddggddggddd} t| }t|jt | j‘ t|jt | j‘ t|jt | j‘ t|jt | j‘ t|j	t | j	‘ t
|jdg t|jjdkd t|jjdkd t|jjdkd t|jjdkd t|j	jdkd d S )Nr
   r5   r   )r
   rA   )r
   r
   )r   r   r   r   r   r"   r   r   r   r   r   r   r   rJ   rK   r   r   r   Ϊtest__clean_inputs2Ώ   s(    ϊ	rM   c                  C   sΦ   t ddggtj dd‘dgdggtj dd‘dgdggdgd} t| }t|jt ddg‘ t|jt ddg‘ t|j	t ddg‘ t
|jdgd  t|jjdkd t|jjdkd t|j	jdkd d S )Nr
   r   r5   r   rI   rA   )r   r   r.   r/   r   r   r   r"   r   r   r   r   r   rJ   rK   r   r   r   Ϊtest__clean_inputs3Ω   s     

ϊ	rN   c                  C   s   t ddgd} ttt| jdd ttt| jdgd ttt| jddgd ttt| jdddgd t ddddgd} ttt| jd	d	gd d S )
Nr
   r   r$   )r
   r   r   r?   rB   r+   r,   )r
   r   r+   r,   )r   r'   r)   r   rD   rG   r   r   r   Ϊtest_bad_boundsο   s    rO   c                  C   sr  t ddgd} t| }t|jdtjfgd  t| jg d}t|jdtjfgd  t| jg gd}t|jdtjfgd  t| jdd}t|jdgd  t| jdgd}t|jdgd  t| jdgd}t|jdtjfgd  t| jdgd}t|jtj dfgd  t| jd	tj d fgd}t|jtj tjfgd  t ddd
dgd} t| }t|jdtjfgd  t| jdd}t|jdgd  t| jdgd}t|jdgd  t| jdgd}t|jdtjfgd  t| jdgd}t|jtj dfgd  t| jd	tj d fd tjftj tjfgd}t|jtj tjfgd  d S )Nr
   r   r$   r   r?   rB   )r
   Nr    )NNr+   r,   )r   r   r   r   r   r   rD   rK   r   r   r   Ϊtest_good_boundsό   s<    0rP   )Ϊ__doc__Ϊnumpyr   Znumpy.testingr   r   r   Zpytestr   r'   Zscipy.optimize._linprog_utilr   r   Ϊcopyr   Ϊdatetimer	   r   r#   r*   r2   r4   r:   rE   rH   rL   rM   rN   rO   rP   r   r   r   r   Ϊ<module>   s&   