a
    Re                     @   sJ   d Z ddlmZm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_equal)raiseswarnsNrootc                   @   s4   e Zd Zdd Zdd Zdd Zdd Z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   S/var/www/sunrise/env/lib/python3.9/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_param9   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__E   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      ?r3   )r(   r   retr   r   r   __call__H   s    
&"z*TestRoot.test_f_size.<locals>.fun.__call__N)__name__
__module____qualname__r5   r8   r   r   r   r   funD   s   r<   皙?g        r   )r#   )assert_raises
ValueErrorr   )r(   r<   Fr   r   r   test_f_size@   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 s0    Y  t|j|j t|j|j |j|j  u r|j  u rdu sn 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=   r6   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   r6   r   rC   r   r   r   grad^   s    z$TestRoot.test_gh_10370.<locals>.gradc                    s    | || |fS )Nr   rC   r<   rD   r   r   fun_grada   s    z(TestRoot.test_gh_10370.<locals>.fun_gradr   )r   r   )r1   r#   z'Method krylov does not use the jacobian)match)r1   r#   r"   T)r   r.   r   assert_warnsRuntimeWarningr   r   r%   )r(   rF   Zx0refmessageZres1Zres2r   rE   r   test_gh_10370W   s    
00zTestRoot.test_gh_10370N)r9   r:   r;   r*   r/   r2   rA   rL   r   r   r   r   r      s
   r   )__doc__Znumpy.testingr   r   Zpytestr   r>   r   rH   numpyr   Zscipy.optimizer   r   r   r   r   r   <module>   s
   