U
    »mœdÆ   ã                   @   s    d dl Z d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZ G dd„ deƒZdd„ Zdd	„ Zd
d„ Zdd„ ZG dd„ dƒZG dd„ dƒZdS )é    N)ÚTestCaseÚassert_array_equal)ÚBoundsÚLinearConstraintÚNonlinearConstraintÚPreparedConstraintÚnew_bounds_to_oldÚold_bound_to_newÚstrict_boundsc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestStrictBoundsc                 C   sŽ   d}d}d}d}t ||||ƒ\}}t|tj tj tj gƒ t|tjtjtjgƒ d}t ||||ƒ\}}t|dddgƒ t|dddgƒ d S ©Né   é   é   FT©r
   r   ÚnpÚinf©ÚselfÚmÚlbÚubÚenforce_feasibilityZ	strict_lbZ	strict_ub© r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_constraints.pyÚ+test_scalarvalue_unique_enforce_feasibility   s"    þþz<TestStrictBounds.test_scalarvalue_unique_enforce_feasibilityc                 C   sš   d}dddg}dddg}d}t ||||ƒ\}}t|tj tj tj gƒ t|tjtjtjgƒ d}t ||||ƒ\}}t|dddgƒ t|dddgƒ d S )	Nr   é   r   r   é   é   FTr   r   r   r   r   Ú+test_vectorvalue_unique_enforce_feasibility   s"    

þþz<TestStrictBounds.test_vectorvalue_unique_enforce_feasibilityc                 C   sX   d}d}d}dddg}t ||||ƒ\}}t|tj dtj gƒ t|tjdtjgƒ d S r   r   r   r   r   r   Ú+test_scalarvalue_vector_enforce_feasibility/   s    
þz<TestStrictBounds.test_scalarvalue_vector_enforce_feasibilityc                 C   sb   d}dddg}ddt jg}dddg}t||||ƒ\}}t|dt j dgƒ t|dt jt jgƒ d S )Nr   r   r   r   r   TF)r   r   r
   r   r   r   r   r   Ú+test_vectorvalue_vector_enforce_feasibility:   s    

þz<TestStrictBounds.test_vectorvalue_vector_enforce_feasibilityN)Ú__name__Ú
__module__Ú__qualname__r   r   r    r!   r   r   r   r   r   
   s   r   c                     s  t  dddg¡} t  dt jdg¡}t  dddg¡}t jd	d
d
gtd�}t| ||ƒ}t tt||¡ tt| |ƒdddgƒ}| 	dddg¡dk 
¡ s”t‚| 	dddg¡dk ¡ s°t‚t  ddddg¡}t  ddddgddddgddddgg¡‰ t jd
d
d
gtd�}tˆ t j d|ƒ}t tt||¡ ttˆ t j dƒddddgƒ}| 	ddddg¡dk 
¡ �s^t‚| 	ddddg¡dk ¡ �s~t‚‡ fdd„}‡ fdd„}dd„ }	t|t j d||	|ƒ}
t tt|
|¡ t|
ddddgƒ}| 	ddddg¡dk 
¡ �söt‚| 	ddddg¡dk ¡ �st‚d S )Nr   é   é   ç      à?éF   r   r   r   FT)Zdtypeg      Ð?é   é   r   r   r   é   é   iöÿÿÿc                    s
   ˆ   | ¡S ©N)Údot©Úx©ÚAr   r   Úfun]   s    z2test_prepare_constraint_infeasible_x0.<locals>.func                    s   ˆ S r-   r   r/   r1   r   r   Újac`   s    z2test_prepare_constraint_infeasible_x0.<locals>.jacc                 S   s
   t  d¡S )N)r   r   )ÚspsZ
csr_matrix)r0   Úvr   r   r   Úhessc   s    z3test_prepare_constraint_infeasible_x0.<locals>.hess)r   Úarrayr   Úboolr   ÚpytestÚraisesÚ
ValueErrorr   Ú	violationÚanyÚAssertionErrorÚallr   r   )r   r   Úx0r   ÚboundsÚpcZlinearr3   r4   r7   Z	nonlinearr   r1   r   Ú%test_prepare_constraint_infeasible_x0F   s:    (
ÿ  ÿ rD   c                  C   s¶   dd„ } t | ddgddgƒ}t|ddgƒ}t| ddg¡ddgƒ tj | dd	g¡dd
g¡ tj | d	d	g¡ddg¡ tj | d
dg¡ddg¡ tj | d
dg¡ddg¡ d S )Nc                 S   s.   t  | d d | d  | d d | d  g¡S )Nr   r   r   )r   r8   r/   r   r   r   Úcons_fp   s    ztest_violation.<locals>.cons_féÿÿÿÿg333333ë¿r   r'   r   ç        g333333ó?gš™™™™™¹?g{®Gázä?r   g333333ó¿gR¸…ëQÈ?g{®Gáz„?g=
×£p=ò?)r   r   r   r=   r   ÚtestingZassert_almost_equal)rE   ZnlcrC   r   r   r   Útest_violationo   s    rI   c            	      C   sú   t  t j ddg¡} t  dt jdg¡}dddg}tt| |dƒ|ƒ ddd	g}ttd
|dƒ|ƒ dddg}ttt j |dƒ|ƒ dddg}tt| ddƒ|ƒ dddg}tt| t jdƒ|ƒ dddg}ttdddƒ|ƒ dddg}ttt j t jdƒ|ƒ d S )Nr   r   é
   ©Nr   )r   N)r   rJ   )rF   r   ©rF   N)rF   rJ   rF   )NN)NrJ   )Nr%   )r   r%   )r   r%   r%   )r   N)r   r   r   )r   r8   r   r   r   )	r   r   rB   Zbounds_single_lbZbounds_no_lbZbounds_single_ubZbounds_no_ubZbounds_single_bothZbounds_no_bothr   r   r   Útest_new_bounds_to_old�   s     






rM   c                  C   s¬   ddgddf} t  dt j dg¡}t  ddt jg¡}t| ƒ\}}t||ƒ t||ƒ t j t jft  dg¡t  dg¡fg} t| ƒ\}}t|t j dgƒ t|t jdgƒ d S )Nr   r   rK   rL   rF   r   )r   r8   r   r	   r   )rB   Zlb_trueZub_truer   r   r   r   r   Útest_old_bounds_to_new›   s    

&rN   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TestBoundsc              	   C   s¸   ddl m}m} ddtjdft dtj g¡t dtjg¡ft dtj g¡t dtjg¡t ddg¡ffD ]F}t|Ž }ttt|Ž ƒƒ}t|j|jƒ t|j	|j	ƒ t|j
|j
ƒ qld S )	Nr   )r8   r   )ç      ð¿g      @rP   Tç      ð?g       @F)Únumpyr8   r   r   r   ÚevalÚreprr   r   r   Zkeep_feasible)r   r8   r   ÚargsrB   Zbounds2r   r   r   Ú	test_repr¬   s    
 ÿüzTestBounds.test_reprc                 C   s<   t ddgddgd�}t|jtjƒs&t‚t|jtjƒs8t‚d S )NrG   rQ   )r   r   )r   Ú
isinstancer   r   Zndarrayr?   r   )r   Úbr   r   r   Ú
test_array¼   s    zTestBounds.test_arrayc                 C   sF   t ƒ }t t tj ¡t tj¡ƒ}|j|jks2t‚|j|jksBt‚d S r-   )r   r   Zasarrayr   r   r?   r   )r   Úb1Úb2r   r   r   Útest_defaultsÂ   s    zTestBounds.test_defaultsc              	   C   s6   d}t jt|d�� tddgdddgƒ W 5 Q R X d S )Nz6`lb`, `ub`, and `keep_feasible` must be broadcastable.©Úmatchr   r   r   )r:   r;   r<   r   )r   Úmessager   r   r   Útest_input_validationÈ   s    z TestBounds.test_input_validationc                 C   s6   t ddƒ}ddg}tj | |¡ddgddgf¡ d S )Néþÿÿÿr   rF   r   r   r   )r   r   rH   Úassert_allcloseÚresidual)r   rB   rA   r   r   r   Útest_residualÍ   s    
zTestBounds.test_residualN)r"   r#   r$   rV   rY   r\   r`   rd   r   r   r   r   rO   «   s
   rO   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLinearConstraintc                 C   sD   t  d¡}t|ƒ}t|t j t jƒ}t|j|jƒ t|j|jƒ d S )Nr   )r   Úeyer   r   r   r   r   )r   r2   ÚlcZlc2r   r   r   r\   Ô   s
    
z"TestLinearConstraint.test_defaultsc              	   C   sr   t  d¡}d}tjt|d�� t|ddgdddgƒ W 5 Q R X t  d¡}d}tjt|d�� t|ƒ W 5 Q R X d S )	Nr   z5`lb`, `ub`, and `keep_feasible` must be broadcastabler]   r   r   r   )r   r   r   z%`A` must have exactly two dimensions.)r   rf   r:   r;   r<   r   Úempty)r   r2   r_   r   r   r   r`   Û   s    
 
z*TestLinearConstraint.test_input_validationc                 C   sB   t  d¡}t|ddƒ}ddg}t j | |¡ddgddgf¡ d S )Nr   ra   r   rF   r   r   )r   rf   r   rH   rb   rc   )r   r2   rg   rA   r   r   r   rd   æ   s    
z"TestLinearConstraint.test_residualN)r"   r#   r$   r\   r`   rd   r   r   r   r   re   Ó   s   re   )r:   rR   r   Znumpy.testingr   r   Zscipy.sparseÚsparser5   Zscipy.optimize._constraintsr   r   r   r   r   r	   r
   r   rD   rI   rM   rN   rO   re   r   r   r   r   Ú<module>   s   $<)(