U
    /d%                     @   s   d dl mZmZmZ d dlmZ d dlZd dl	m
Z
mZmZmZmZmZmZmZmZmZmZ G dd dZG dd dZG d	d
 d
Zdd Zdd ZdS )    )assert_assert_allcloseassert_equal)raisesN)step_size_to_boundfind_active_constraintsmake_strictly_feasibleCL_scaling_vectorintersect_trust_regionbuild_quadratic_1dminimize_quadratic_1devaluate_quadraticreflective_transformationleft_multiplied_operatorright_multiplied_operatorc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestBoundsc                 C   sb  t dddg}t dddg}t dddg}t d	ddg}t||||\}}t|d
 t|dddg t dddg}t||||\}}t|d t|dddg t dddg}t||||\}}t|t d t|dddg t dddg}t||||\}}t|d t|dddg t d}t||||\}}t|t j t|dddg d S )N      g      @      $@      ?      @      Y@        g      (@皙?
      r   g{Gz?g?   g-C6      ?          )nparrayr   r   zerosinf)selflbubxsstephits r+   H/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/optimize/tests/test_lsq_common.pytest_step_size_to_bounds   s.    



z#TestBounds.test_step_size_to_boundsc                 C   s  t dddg}t dddg}t dddg}t|||}t|dddg t ddd	g}t|||}t|d
ddg t|||dd}t|d
ddg t dddg}t|||}t|dddg t|||dd}t|d
ddg t dt j t j g}t t jd	t jg}t d}t|||}t|d
ddg t dddg}t|||}t|d
ddg t|||dd}t|d
ddg d S )Nr         $r   r   r                @r   r   r   r   Zrtolg&.>g:0yEgX@gA:>r   g      &@)r    r!   r   r   r#   ones)r$   r%   r&   r'   activer+   r+   r,   test_find_active_constraints+   s2    
z'TestBounds.test_find_active_constraintsc                 C   s6  t dddg}t dddg}t dddg}t|||d	d
}t|d	 dk t|dd  |dd   t|||dd
}t|dddg t dddg}t|||}tt ||k||k@  t|||d	d
}tt ||k||k@  t ddg}t ddg}t d	dg}t|||dd
}t|d	dg d S )N      gr0   皙?r   g      @r   go    @r   )Zrstepr   g-C6?g<Nё\߿gqh  @r   g@r   g}    Y@g:0yE>g    Y@)r    r!   r   r   r   all)r$   r%   r&   r'   Zx_newr+   r+   r,   test_make_strictly_feasibleP   s$    z&TestBounds.test_make_strictly_feasiblec                 C   s   t t j ddt j g}t dt jdt jg}t ddddg}t ddd	dg}t||||\}}t|dd
ddg t|ddddg d S )Nr/   r   r   r   r0   r   r   r   r.   g      @r   )r    r!   r#   r	   r   )r$   r%   r&   r'   gvZdvr+   r+   r,   test_scaling_vectorj   s    zTestBounds.test_scaling_vectorN)__name__
__module____qualname__r-   r4   r8   r;   r+   r+   r+   r,   r      s   %r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestQuadraticFunctionc                 C   sB   t ddgddgddgg| _t ddg| _t ddg| _d S )	Nr   皙?r   r   r   r6   r   r0   )r    r!   Jr9   diag)r$   r+   r+   r,   setup_methodu   s    z"TestQuadraticFunction.setup_methodc                 C   s  t d}t| j| j|\}}t|d t|d t| j| j|| jd\}}t|d t|d t ddg}t| j| j|\}}t|d t|d t| j| j|| jd\}}t|d t|d t d	d	g}t| j| j|| j|d
\}}}t|d t|d t|d d S )Nr   r   rB   r   r   gffffff @gffffff@gffffff@r   )rB   s0gQ@gQÿ)	r    r"   r   rA   r9   r   rB   r!   r   )r$   r(   abrE   cr+   r+   r,   test_build_quadratic_1d}   s&    










z-TestQuadraticFunction.test_build_quadratic_1dc                 C   s`  d}d}t ||dd\}}t|d t|||d  ||  dd t ||dd\}}t|d t|||d  ||  dd t ||dd\}}t|d t|||d  ||  dd d	}t ||dd|d
\}}t|d t|||d  ||  | dd t ||tj tj|d
\}}t|d t|||d  ||  | dd t ||dtj|d
\}}t|d t|||d  ||  | dd t ||tj d|d
\}}t|d t|||d  ||  | dd d}d}t ||tj tj\}}t|tj  t ||dtj\}}t|tj t|tj  t ||tj d\}}t|tj  t|tj  d S )N   r   r   r   gV瞯<r1   r   r   )rH   r   r@   )r   r   r   r    r#   )r$   rF   rG   tyrH   r+   r+   r,   test_minimize_quadratic_1d   sD    



"
"
"
"z0TestQuadraticFunction.test_minimize_quadratic_1dc                 C   s   t ddg}t| j| j|}t|d t| j| j|| jd}t|d t ddgddgddgg}t| j| j|}t|dddg t| j| j|| jd}t|dddg d S )	Nr   r   gffffff@rD   gffffff@r   gQgzG?)r    r!   r   rA   r9   r   rB   r   )r$   r(   valuevaluesr+   r+   r,   test_evaluate_quadratic   s    


z-TestQuadraticFunction.test_evaluate_quadraticN)r<   r=   r>   rC   rI   rN   rQ   r+   r+   r+   r,   r?   t   s   .r?   c                   @   s   e Zd Zdd ZdS )TestTrustRegionc                 C   s   d}t d}t dddg}t|||\}}t|d t|d t dddg}t|||\}}t|d t|d t d	d
dg}t dddg}t|||\}}t|d t|d t d}ttt||| t d}t d}ttt||| d S )Nr   r   r   r   r   r   g3Eyg3Ey?r   r5   r   g;fg;f?)	r    r"   r!   r
   r   r   r2   assert_raises
ValueError)r$   Deltar'   r(   Zt_negZt_posr+   r+   r,   test_intersect   s(    









zTestTrustRegion.test_intersectN)r<   r=   r>   rV   r+   r+   r+   r,   rR      s   rR   c                  C   sv  t jddgtd} t jddgtd}t ddg}t|| |\}}t|| t|t d t jdd	gtd}t|| t t jt jg\}}t|dd	g t|dd
g t|t t j t j g|\}}t|ddg t|d
dg t|| |\}}t|ddg t|ddg t t j dg} t dt jg}t jddgtd}t|| |\}}t|ddg t|dd
g d S )Nr   rK   )ZdtyperJ   r   r   r      r   r   )r    r!   floatr   r   r2   r#   )r%   r&   rM   r'   r9   r+   r+   r,   test_reflective_transformation   s,    
"rZ   c            
      C   s"  t dd} t dddg}t || }t| |}t ddg}| t |}t| |}t ddg}dt dd	d
 }t dddg}	t|||	| t|||
| t|j|	||	 t|||	| t|||
| t|j|	||	 d S )N   )r   r   r   r   rJ   r   rK   r      )r   r   r      )r    ZarangeZreshaper!   rB   dotr   r   r   ZmatvecZmatmatTZrmatvec)
AZd_leftZDAZJ_leftZd_rightZADZJ_rightr'   XZxtr+   r+   r,   test_linear_operators  s     

rb   )Znumpy.testingr   r   r   Zpytestr   rS   Znumpyr    Zscipy.optimize._lsq.commonr   r   r   r	   r
   r   r   r   r   r   r   r   r?   rR   rZ   rb   r+   r+   r+   r,   <module>   s   4hd