a
    ‡ù»jî  ã                   @   sR   d Z ddlmZmZ ddlZddlmZmZ ddl	Z
ddlmZ G dd„ dƒZdS )z5
Unit tests for optimization routines from _root.py.
é    )Úassert_Úassert_equalN)ÚraisesÚwarns©Úrootc                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	 
dg d¢¡dd„ ƒZdS )ÚTestRootc                 C   sÈ   dd„ }dd„ }dD ]®}|dv r"q|dv r0|}nd }t |ddg|d	|d
�}t |ddg|d|d
�}|› d||jƒ› d||jƒ› �}t|j|ƒ t|j|ƒ tt||jƒƒ ¡ t||jƒƒ ¡ k |ƒ qd S )Nc                 S   s&   | \}}t  |d d |d d g¡S ©Né   é   ©ÚnpÚarray©ÚzÚxÚy© r   úEE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test__root.pyÚfunc   s    z)TestRoot.test_tol_parameter.<locals>.funcc                 S   s.   | \}}t  d|d  dgdd|d  gg¡S )Nr
   é   r   r   r   r   r   r   Údfunc   s    z*TestRoot.test_tol_parameter.<locals>.dfunc)ÚhybrÚlmÚbroyden1Úbroyden2ÚandersonÚdiagbroydenÚkrylov)ÚlinearmixingÚexcitingmixing)r   r   çš™™™™™ñ?g-Cëâ6?)ÚjacZtolÚmethodç      à?z: z vs. )r   r   r   ÚsuccessÚabsÚmax)Úselfr   r   r#   r"   Zsol1Zsol2Úmsgr   r   r   Útest_tol_parameter   s      $ÿzTestRoot.test_tol_parameterc                 C   s2   dd„ }dD ] }t tjt d¡|d|id� qd S )Nc                 S   s   t | d ƒS ©Nr   )r&   ©r   r   r   r   Únorm,   s    z$TestRoot.test_tol_norm.<locals>.norm)r    r   r   r   r   r   r   r   Ztol_norm)r#   Úoptions)r   r   Z
zeros_likeÚzeros)r(   r-   r#   r   r   r   Útest_tol_norm*   s
    ÿzTestRoot.test_tol_normc                 C   s    ddd„}t |ddgdd� d S )Nr   c                 S   s&   | \}}t  |d d |d | g¡S r	   r   )r   Úfr   r   r   r   r   r   <   s    z=TestRoot.test_minimize_scalar_coerce_args_param.<locals>.funcr!   g      ø?)Úargs)r   r   )r(   r   r   r   r   Ú&test_minimize_scalar_coerce_args_param:   s    
z/TestRoot.test_minimize_scalar_coerce_args_paramc                 C   sR   G dd„ dƒ}|ƒ }t tƒ�" t|ddgdd� W d   ƒ n1 sD0    Y  d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z!TestRoot.test_f_size.<locals>.func                 S   s
   d| _ d S r+   ©Úcount)r(   r   r   r   Ú__init__F   s    z*TestRoot.test_f_size.<locals>.fun.__init__c                 S   s†   |  j d7  _ | j d s>|d d|d |d  d   d }nD|d d|d |d  d   d d|d |d  d  |d  g}|S )Nr   é   r   r$   r
   g      ð?r4   )r(   r   Úretr   r   r   Ú__call__I   s    
&"ÿz*TestRoot.test_f_size.<locals>.fun.__call__N)Ú__name__Ú
__module__Ú__qualname__r6   r9   r   r   r   r   ÚfunE   s   r=   çš™™™™™¹?g        r   )r#   )Úassert_raisesÚ
ValueErrorr   )r(   r=   ÚFr   r   r   Útest_f_sizeA   s    
zTestRoot.test_f_sizec                    s  dd„ ‰ dd„ ‰‡ ‡fdd„}t  d¡}tˆ |dd	d
�}d}tt|d��" tˆ |dd	ˆd�}W d   ƒ n1 sp0    Y  tt|d��" t||dd	dd�}W d   ƒ n1 s®0    Y  t|j|jƒ t|j|jƒ |j|j  u rø|j  u rødu sþn J ‚d S )Nc                 S   s@   d| d  d| d d   d d| d d  d| d   d gS )	Nr
   r   g      Ð?r   r   é
   r>   r7   r   ©r   Zignoredr   r   r   r=   \   s    z#TestRoot.test_gh_10370.<locals>.func                 S   s    dd| d  gd| d  dggS )Nr
   r$   r   gš™™™™™É?r   r7   r   rD   r   r   r   Úgrad_   s    z$TestRoot.test_gh_10370.<locals>.gradc                    s   ˆ | |ƒˆ| |ƒfS )Nr   rD   ©r=   rE   r   r   Úfun_gradb   s    z(TestRoot.test_gh_10370.<locals>.fun_gradr   )r   r   )r2   r#   z'Method krylov does not use the jacobian)Úmatch)r2   r#   r"   T)r   r/   r   Úassert_warnsÚRuntimeWarningr   r   r%   )r(   rG   Úx0ÚrefÚmessageZres1Zres2r   rF   r   Útest_gh_10370X   s    
00zTestRoot.test_gh_10370r#   )
r   r   r   r   r   r   r   r    r   zdf-sanec                 C   s*   dd„ }t |dg|d�}|j|ks&J ‚d S )Nc                 S   s   | d S )Nr   r   r,   r   r   r   r   w   s    z,TestRoot.test_method_in_result.<locals>.funcr   )rK   r#   )r   r#   )r(   r#   r   Úresr   r   r   Útest_method_in_resultr   s    zTestRoot.test_method_in_resultN)r:   r;   r<   r*   r0   r3   rB   rN   ÚpytestÚmarkZparametrizerP   r   r   r   r   r      s   r   )Ú__doc__Znumpy.testingr   r   rQ   r   r?   r   rI   Únumpyr   Zscipy.optimizer   r   r   r   r   r   Ú<module>   s   