o
    ?Hh                     @   s  d dl Z d dlmZ d dlmZmZmZmZmZ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 d dlmZ d dlmZmZmZmZ d dlmZ d dlm Z m!Z" d	ee#j$ Z%ee#j$Z&ej'ej(ej)ej*ej+gZ,ejgZ-e,e- Z.d
d Z/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5edd Z6G dd dZ7G dd de7Z8G dd de7Z9d d! Z:d"d# Z;d$d% Z<G d&d' d'Z=d(d) Z>e j?j@d*d+ ZAe j?j@d,d- ZBd.d/ ZCd0d1 ZDd2d3 ZEe j?Fd4d5ejGfd6ejHfgd7d8 ZIe j?j@d9d: ZJe j?Fd;g d<d=d> ZKe j?Fd?g d<d@dA ZLe j?Fd;g d<e j?FdBdCdDgdEdF ZMe j?j@dGdH ZNe j?Fd;g d<e j?FdBdCdDgdIdJ ZOdKdL ZPdMdN ZQe j?Fd?e.dOdP ZRdS )Q    N)	lru_cache)assert_warnsassert_assert_allcloseassert_equalassert_array_equalsuppress_warnings)finfopowernanisclosesqrtexpsincos)optimize)	_zeros_pynewtonroot_scalarOptimizeResult)getfullargspec_no_self)	get_tests	functions   c                 C      | d d|   d S N       xr   r   _/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_zeros.pyf1!      r"   c                 C      d|  d S Nr   r   r   r   r   r!   f1_1%      r&   c                 C      dd|   S N       @r   r   r   r   r   r!   f1_2)   r'   r+   c                 C   s   t | t| t| fS N)r"   r&   r+   r   r   r   r!   f1_and_p_and_pp-      r-   c                 C   s   t | t|  S r,   r   r   r   r   r   r!   f22      r0   c                 C      t | t|  S r,   )r   r   r   r   r   r!   f2_16   r1   r3   c                 C   r2   r,   r/   r   r   r   r!   f2_2:   r1   r4   c                 C   s   | S r,   r   r   r   r   r!   f_lrucached?   s   r5   c                   @   sR   e Zd Zdeej Zdeej Z		d	ddZ	d
ddZ
		d	ddZdS )TestScalarRootFindersr   Nc                 K   s   g }|pg D ]}||vrdddd ||}|||  qtd
i |}|ddd |p0g D ]}|| ||< q1| d}	| d	d
}
z||d	|
i|\}}|	||fW S  tyl   |	ttddtj||f Y S w )Nx0x1f)abfuncTFfull_outputdisprootargsr   )	getappenddictupdate	ExceptionzerosRootResultsr   
_EVALUEERR)selftcmethodsig_args_keyssig_kwargs_keyskwargsmethod_argskmethod_kwargsr@   	func_argsrrrr   r   r!   _run_one_testJ   s"   
z#TestScalarRootFinders._run_one_testc                    s  t }t|j  t|j}t|j| }|jd| g dv r;dv r5d dv r5d jd< n
jd< jd	< fd
d|D }	pUg dd |	D }
fdd|
D }
dd |
D }t	t||gdg g jjd}|j
di  |d	 |d|d  dd |	D }dd |D }dd |D } fddt|||D }dd |D }dd t||D }t	|t|gg dg dd |	D }fdd|	D }t	|| dS )zRun test-cases using the specified method and the supplied signature.

        Extract the arguments for the method call from the test case
        dictionary using the supplied keys for the method's signature.N)secantr   halley)r   rY   fprime)rY   fprime2tolxtolrtolc                    s*   g | ]}t j|fd  qS ))rN   rO   )listrW   ).0rL   )rP   rM   rK   rN   rO   r   r!   
<listcomp>{   s    z3TestScalarRootFinders.run_tests.<locals>.<listcomp>c                 S   s   g | ]	}|d  j s|qS r   	convergedr`   eltr   r   r!   ra          c                    s    g | ]}|d  d  vr|qS rB   IDr   re   
known_failr   r!   ra      s     c                 S   s   g | ]}|d  d qS rh   r   re   r   r   r!   ra      s    r   r]   r^   c                 S   s   g | ]	}|d  j r|qS rb   rc   re   r   r   r!   ra      rg   c                 S      g | ]}|d  j qS rb   r@   re   r   r   r!   ra          c                 S   s   g | ]}|d  qS r   r   re   r   r   r!   ra      s    c                    s<   g | ]\}}}t || d s|d d vr|g| qS ))r^   atolrB   ri   )r   )r`   r:   crf   )rq   rk   r^   r   r!   ra      s    c                 S   s2   g | ]\}}}}|d  |g| dt R  qS )r9   rA   )rC   tuple)r`   arootrr   fulloutrL   r   r   r!   ra      s    
"c                 S   s"   g | ]\}}|d kr|g| qS rp   r   )r`   fvrf   r   r   r!   ra      s   " c                 S   rm   rb   )rM   )r`   resultr   r   r!   ra      ro   c                    s   g | ]} qS r   r   )r`   _)namer   r!   ra          r   )_getfullargspecr   
kwonlyargslendefaultsrA   rD   r]   r^   r   rF   rC   zip)rK   testsrM   ry   rk   rP   sig	nDefaults	nRequiredresultsnotcvgdnotcvged_IDStolscvgdapproxcorrectnotclosefvsmethod_from_resultexpected_methodr   )	rq   rk   rP   rM   ry   r^   rK   rN   rO   r!   	run_testsa   sL   





zTestScalarRootFinders.run_testsc                 K   s*   t ||d}| j|||fd|i| dS )zuRun a collection of tests using the specified method.

        The name is used to determine some optional arguments.
smoothnessrk   N)r   r   )rK   
collectionrM   ry   r   rk   rP   r   r   r   r!   run_collection   s   z$TestScalarRootFinders.run_collection)NNr,   )__name__
__module____qualname__npr	   floatepsr]   r^   rW   r   r   r   r   r   r!   r6   D   s    

;r6   c                   @   s   e Zd Zejdeejdedd Zejdeejdedd Z	ejdeejdedd Z
ejded	d
 Zejdejejejgdd Zejdedd ZdS )TestBracketMethodsrM   functionc                 C   s`   dt d}}t||j||g|| j| jd}|jsJ t|jd| j| jd |j|jks.J d S N      ?   )rM   bracketr7   r]   r^         ?rq   r^   )	r   r   r   r]   r^   rd   r   r@   rM   rK   rM   r   r:   r;   rU   r   r   r!   test_basic_root_scalar   s   
z)TestBracketMethods.test_basic_root_scalarc                 C   sL   dt d}}||||| j| jdd\}}|jsJ t|d| j| jd d S )Nr   r   T)r]   r^   r>   r   r   )r   r]   r^   rd   r   )rK   rM   r   r:   r;   r@   rU   r   r   r!   test_basic_individual   s   

z(TestBracketMethods.test_basic_individualc                 C   sf   dt d}}t||jt||g|| j| jd}|jsJ t|j	d| j| jd |j
|jks1J d S r   )r   r   r   r   arrayr]   r^   rd   r   r@   rM   r   r   r   r!   test_bracket_is_array   s   
z(TestBracketMethods.test_bracket_is_arrayc                 C   s   | j d||jdd d S )Napsr   r   )r   r   )rK   rM   r   r   r!   test_aps_collection   s   z&TestBracketMethods.test_aps_collectionc                 C   s,   |t jkrdhni }| jd||j|d d S )Nzfun7.4chandrupatlarj   )rH   ridderr   r   )rK   rM   rk   r   r   r!   test_chandrupatla_collection   s   
z/TestBracketMethods.test_chandrupatla_collectionc                 C   s4   d\}}|t ||dd\}}|jsJ t|d d S )N)rB   r   Tr>   r   )r5   rd   r   )rK   rM   r:   r;   r@   rU   r   r   r!   test_lru_cached_individual   s   
z-TestBracketMethods.test_lru_cached_individualN)r   r   r   pytestmarkparametrizebracket_methodststutils_functionsr   r   r   r   rH   bisectr   toms748r   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	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zejjdd Zdd Zdd Zejjdd Zdd  Zd!d" Zejd#e d$d%igd&d' Zejd$d(d%gd)d* Zd+S ),
TestNewtonc                 C   s6   dg}|ddg7 }dD ]}| j |tjdd|d qd S )N	aps.13.00z	aps.12.05	aps.12.17r   complexr   r   r   rk   r   rH   r   rK   rk   r   r   r   r!   test_newton_collections   s   z"TestNewton.test_newton_collectionsc                 C   s,   g d}dD ]}| j |tjdd|d qd S )N)z	aps.12.06z	aps.12.07z	aps.12.08z	aps.12.09z	aps.12.10z	aps.12.11z	aps.12.12z	aps.12.13z	aps.12.14z	aps.12.15z	aps.12.16r   z	aps.12.18r   r   rY   r   r   r   r   r   r   r!   test_halley_collections   s   z"TestNewton.test_halley_collectionsc                 C   s   t ttftttffD ]M\}}}tj|ddd}t||ddd tj|dddd}t||ddd tj|d|dd}t||ddd tj|d||dd	}t||ddd q
d S )
Nr   ư>)r\   r   rq      )r8   r\   )rZ   r\   )rZ   r[   r\   )	r"   r&   r+   r0   r3   r4   rH   r   r   )rK   r9   f_1f_2r    r   r   r!   test_newton   s   zTestNewton.test_newtonc                 C   s   t ttftttffD ]\}}}t|dd|dd}t||jddd q
t ttftttffD ]\}}}t|dddd}t||jddd q-dS )	z#Invoke newton through root_scalar()r   r   r   )rM   r7   rZ   r]   r   r   rM   r7   r]   N	r"   r&   r+   r0   r3   r4   r   r   r@   rK   r9   r   r   rU   r   r   r!   test_newton_by_name  s   zTestNewton.test_newton_by_namec                 C   s   t ttftttffD ]+\}}}t|ddddd}t||jddd t|ddddd}t||jddd q
t ttftttffD ]\}}}t|dddd	}t||jddd q@d
S )z#Invoke secant through root_scalar()rX   r   r   r   rM   r7   r8   r]   r   r   r   r   Nr   r   r   r   r!   test_secant_by_name
  s   zTestNewton.test_secant_by_namec              	   C   sL   t ttftttffD ]\}}}t|dd||dd}t||jddd q
dS )z#Invoke halley through root_scalar()rY   r   r   )rM   r7   rZ   r[   r]   r   r   Nr   r   r   r   r!   test_halley_by_name  s   zTestNewton.test_halley_by_namec                 C   s   d}t jt|d ttdtddd W d    n1 sw   Y  d}t jt|d ttdtddd W d    d S 1 s@w   Y  d S )	Nz$fprime2 must be specified for halleymatchrY   r   r   )rM   rZ   r7   r]   z#fprime must be specified for halley)rM   r[   r7   r]   )r   raises
ValueErrorr   r"   r&   r+   )rK   messager   r   r!   test_root_scalar_fail  s   "z TestNewton.test_root_scalar_failc           
      C   s   dd }dd }dd }t g d}t tdd	 d
 }||ddddf}d
gd }t||||}d}	t||	 tj|||||d}t||	 tj|||d}t||	 dS )ztest newton with arrayc                 W   sJ   |d | |d   }|d |d t ||d  d   ||d   |  S )Nr   r   r   r   r   r   r   r   r   r    r:   r;   r   r   r!   r"   '  s   6z(TestNewton.test_array_newton.<locals>.f1c                 W   sP   |d |d  }|d  t |d |d  | |   | |d |d   d S )Nr   r   r   r   r   r   r   r   r   r   r!   r&   +  s   @z*TestNewton.test_array_newton.<locals>.f1_1c                 W   s@   |d |d  }|d  t |d |d  | |   |d  S )Nr   r   r   r   r   r   r   r   r!   r+   /  s   0z*TestNewton.test_array_newton.<locals>.f1_2)
g4O@gNk@g]0J@g]Qݚt@g~EO5@g$J ?g~5,@gXCڭ@gͮ9@@gӍ@
   r   g      @g&.>gMbp?gn2d?)
gԩ˰@g9~4b'@gaq(@g0p@gk"z?g4se?gU+F@gwQu%@gd6)@g)i!@)r[   rA   N)r   r   r   rangerH   r   r   )
rK   r"   r&   r+   a0a1rA   r7   r    
x_expectedr   r   r!   test_array_newton$  s   


zTestNewton.test_array_newtonc                 C   s   dd }dd }t dd}tj|||d}t||d t d}tj|||d}t||d t||}t||d d S )	Nc                 S   s   | d d S )Nr                 ?r   r   r   r   r!   r9   L  r'   z/TestNewton.test_array_newton_complex.<locals>.fc                 S      dS Nr   r   r   r   r   r!   rZ   O     z4TestNewton.test_array_newton_complex.<locals>.fprimer   r   )rZ           )r   fullrH   r   r   ones)rK   r9   rZ   tr    r   r   r!   test_array_newton_complexK  s   
z$TestNewton.test_array_newton_complexc                 C   s2   t jdd ddgtddggd}t|d d	S )
z8test secant doesn't continue to iterate zero derivativesc                 W   s   | |  |d  S )Nr   r   r    r:   r   r   r!   <lambda>`  rz   z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>gˡE}@r         r7   rA   )f~@g      @N)rH   r   r   r   r   rK   r    r   r   r!   !test_array_secant_active_zero_der^  s   z,TestNewton.test_array_secant_active_zero_derc                 C   sX   t jdd dgd ddgfd}t|d t jd	d d
gd ddgfd}t|d d S )Nc                 S      || d  S r%   r   yzr   r   r!   r   f      z7TestNewton.test_array_newton_integers.<locals>.<lambda>      @r   g      .@g      1@r   )gNO@r   c                 S   r   r%   r   r   r   r   r!   r   j  r   r      r   )rH   r   r   r   r   r   r!   test_array_newton_integersd  s   
 z%TestNewton.test_array_newton_integersc                 C   s   t ttjdd ddgdd  tt, tjdd ddgdd dd}t|jd	 |j	 s1J |j
 r8J W d    d S 1 sCw   Y  d S )
Nc                 S      | d d S r%   r   r   r   r   r!   r   q  r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>r   c                 S      d|  S r%   r   r   r   r   r!   r   q      c                 S   r   r%   r   r   r   r   r!   r   t  r   c                 S   r   r%   r   r   r   r   r!   r   u  r   Tr   r   )r   RuntimeWarningrH   r   r   warnsr   r@   zero_derallrd   any)rK   r   r   r   r!   #test_array_newton_zero_der_failuresm  s   "z.TestNewton.test_array_newton_zero_der_failuresc                 C   s   dd }dd }dd }dd }t |d	d
|d}t |d	d
dd}t|j|jdd td|j |j t |dd
||d}t |dd
dd}t|j|jdd td
|j |j d S )Nc                 S   r   r   r   r   r   r   r!   r"   {  r#   z+TestNewton.test_newton_combined.<locals>.f1c                 S   r$   r%   r   r   r   r   r!   r&   }  r'   z-TestNewton.test_newton_combined.<locals>.f1_1c                 S   r(   r)   r   r   r   r   r!   r+     r'   z-TestNewton.test_newton_combined.<locals>.f1_2c                 S   s"   | d d|   d d|  d dfS )Nr   r   r*   r   r   r   r   r!   r-     s   "z8TestNewton.test_newton_combined.<locals>.f1_and_p_and_ppr   r   )rM   r7   rZ   T:0yE>r   r   rY   )rM   r7   rZ   r[   )rM   r7   r[   )r   r   r@   r   function_calls)rK   r"   r&   r+   r-   sol0solr   r   r!   test_newton_combinedz  s   zTestNewton.test_newton_combinedc              	   C   sv  d}g d}t dD ]}ddd}dtgdtggd | D ]\}}|||< qtjt|fdd	i|\}}	t|	j t||	j	 t|	j
|	jf||  |d
krY|	j|	j
d ksXJ nt|	j|d |	j
  |	j
d }
tjt|f|
d	d|\}}	t|	j  t||	j	 t|	j
|
 |dkrd|
 }tjt|d tjt|f|
dd|\}}	W d    n1 sw   Y  q
d S )Nr   ))      )r   r   )r   	   r   T)r\   r>   rZ   r[   r?   Fr   r   )maxiterr?   z3Failed to converge after %d iterations, value is .*r   )r   r&   r+   rH   r   r"   r   rd   r   r@   
iterationsr   r   r   RuntimeError)rK   capsysr7   expected_countsderivsrP   rR   vr    rU   itersmsgr   r   r!   test_newton_full_output  s2   
 


 z"TestNewton.test_newton_full_outputc                 C   sh   dd }dd }t ttj|d|dd tjtdd	 t|d| W d    d S 1 s-w   Y  d S )
Nc                 S      | d d S )Nr   r*   r   r   r   r   r!   r<     r'   z0TestNewton.test_deriv_zero_warning.<locals>.funcc                 S   r   r%   r   r   r   r   r!   dfunc     z1TestNewton.test_deriv_zero_warning.<locals>.dfuncr   Fr?   zDerivative was zeror   )r   r   rH   r   r   r   r  )rK   r<   r  r   r   r!   test_deriv_zero_warning  s   "z"TestNewton.test_deriv_zero_warningc                 C   s4   t ddg}| }tt j|t j t|| d S )N皙?r   )r   r   copyr   r   r   r   )rK   r7   x0_copyr   r   r!   test_newton_does_not_modify_x0  s   z)TestNewton.test_newton_does_not_modify_x0c                 C   s  dd }t |dddd}t |ddddd	}t|dddd
dd }t||jddd |jjt ks3J t||jddd |jjt ksFJ t||jddd |jjt ksYJ |j|j  krg|jksjJ  J |j|jd   kr|j  kr|j  kr|jd ksJ  J d S )Nc                 S   s   t | sJ t| S r,   )r   isscalarr"   r   r   r   r!   r9     s   z+TestNewton.test_gh17570_defaults.<locals>.fr   r   r   r   rX   r   r   T)r7   r8   r\   r>   r   r   r   )r   r   r   r@   shapers   r  r   )rK   r9   res_newton_defaultres_secant_default
res_secantr   r   r!   test_gh17570_defaults  s4   
z TestNewton.test_gh17570_defaultsrP   rM   r   c                 C   s:   dd }t j|fddd|}|jsJ t|jd d S )Nc                 S   s$   |dksJ |dksJ | | | S )Nr   r   r   r   r   r   r!   r9     s   z'TestNewton.test_args_gh19090.<locals>.fr   )r   r   r   r   )r   r   rd   r   r@   )rK   rP   r9   resr   r   r!   test_args_gh19090  s   
zTestNewton.test_args_gh19090rX   c                 C   sN   dd }t j|d|d}|jsJ tt|jd |jjttjks%J d S )Nc                 S   r  )Nr   r   r   r   r   r!   r9     s   z)TestNewton.test_int_x0_gh19280.<locals>.fr   )r7   rM   g;f?)	r   r   rd   r   absr@   dtyper   float64)rK   rM   r9   r  r   r   r!   test_int_x0_gh19280  s
   
zTestNewton.test_int_x0_gh19280N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   thread_unsafer   r  r  r  r  r  r   rE   r   r%  r   r   r   r!   r      s0    		'	
$
	"

r   c                     s^   d  fdd} t jt jg}t }}|D ]}|| dd||d}t |||d|j d qd S )	Nr  c                    s   |   S r,   r   r   rn   r   r!   r9     r  ztest_gh_5555.<locals>.fg    חg    cArl   zmethod )rq   r^   err_msg)rH   r   r   TOLr   r   )r9   methodsr]   r^   rM   r  r   rn   r!   test_gh_5555   s   

r*  c                  C   sP   dd } d}dt  }tjtjg}|D ]}|| dd||d}td|||d	 qd S )
Nc                 S   s   | dk rdS | d S )Nr   g333333?r   r   r   r   r!   r9     s   ztest_gh_5557.<locals>.fgRQ?r   r   r   rl   r+  r   )
_FLOAT_EPSrH   brentqbrenthr   )r9   rq   r^   r)  rM   r  r   r   r!   test_gh_5557  s   
r/  c                     sZ   d} d}| |fD ]"\}}}t | tjtjfD ]}| fdd||}t|| qqd S )N)g      |g     ug      y)g     u@g      |@g      y@c                    s   t |   S r,   r   r   rr   r   r!   r   1  s    z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>)r   r   rH   r.  r-  r   )underflow_scenariooverflow_scenarior:   r;   r@   rM   r  r   r0  r!   'test_brent_underflow_in_root_bracketing&  s   
r3  c                   @   s0   e Zd ZejddddddZdd Zd	d
 ZdS )TestRootResultsr   ,   .   r   r   )r@   r  r   flagrM   c                 C   s   d}t t| j| d S )Nz      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0
         method: newton)r   reprrU   )rK   expected_reprr   r   r!   	test_repr9  s   zTestRootResults.test_reprc                 C   s   t | jtsJ d S r,   )
isinstancerU   r   )rK   r   r   r!   	test_type?  r#   zTestRootResults.test_typeN)r   r   r   rH   rI   rU   r:  r<  r   r   r   r!   r4  5  s    r4  c                  C   s   dd } dd }dd }t dd}d	}tj| ||||d
d}t| |g|R  dd
d |gd }d	}tj| ||||d
d}t| |g|R  dd
d dS )z&Test Halley's works with complex rootsc                 W   s$   |d | d  |d |   |d  S )Nr   r   r   r   r   r   r   r!   r9   E  s   $ztest_complex_halley.<locals>.fc                 W   s   d|d  |  |d  S )Nr   r   r   r   r   r   r   r!   r   H     z test_complex_halley.<locals>.f_1c                 W   s:   d|d  }zt | }W n ty   | Y S w |g| S )Nr   r   )r}   	TypeError)r    r:   retvalsizer   r   r!   r   K  s   
z test_complex_halley.<locals>.f_2r   r*   )r*   g      @r   r   )rA   rZ   r[   r\   r   r   r   N)r   rH   r   r   )r9   r   r   r   coeffsr   r   r   r!   test_complex_halleyC  s   
	
rB  c                 C   s  t tjd }d| d|  }t }|td tjdd |gd d}W d	   n1 s0w   Y  t	|d
gd  d}t }|td tjdd |dd}W d	   n1 s]w   Y  t	|d t
jtdd tjdd |dd}W d	   n1 sw   Y  d}t }|td tjdd |dd}W d	   n1 sw   Y  t	|d t
jtdd tjdd |dd}W d	   d	S 1 sw   Y  d	S )zBTest secant method with a non-zero dp, but an infinite newton stepgQ?g      i@r*   zRMS ofc                 S      | d d S )Ng      Y@r   r   r   r   r   r!   r   m  r   z%test_zero_der_nz_dp.<locals>.<lambda>r   r7   Nd   g.ЗK.?Tolerance ofc                 S   rC  Nr   r   r   r   r   r   r!   r   s  r   F)r7   r?   r   r   c                 S   rC  rG  r   r   r   r   r!   r   v  r   Tg.ЗK.c                 S      | d d S rG  r   r   r   r   r!   r   z  r   rB   c                 S   rH  rG  r   r   r   r   r!   r   }  r   )r   r	   r   r   r   filterr   rH   r   r   r   r   r  )r	  dxp0supr    r   r   r!   test_zero_der_nz_dp_  s2   

"rM  c                     s   d} d d}d}d}|| |  | } fdd}t t tj|g dd	|| gd
d}|j r3J W d   n1 s=w   Y  t t tj|dgd	 d	|| gd
d}W d   dS 1 sbw   Y  dS )z(Test that array newton fails as expectedr  ga2U0*#?g@g\mJA?gCl@c              	      s6   dt |  dt  d | d| t |     S )Nr   r   g@gGz@)r   r   log10)darcy_frictionredia	roughnessr   r!   colebrook_eqn  s
   z1test_array_newton_failures.<locals>.colebrook_eqn){Gz?g?gvÖ?g333333?r   T)r7   r  rA   r>   NrU  )	r   r   r   rH   r   rd   r   r   r  )diameterrhomuureynolds_numberrT  rw   r   rR  r!   test_array_newton_failures  s(   
"r[  c                  C   sT  dd } t j| dd}t|dt jt jd t j| dgd d}t|dt jt jd dd }d	d
 }t j| d|d}t|dt jt jd t j| d||d}t|dt jt jd t j| dgd |d}t|dt jt jd t j| dgd ||d}t|dt jt jd t j| d|d}t|dt jt jd t j| dgd |d}t|dt jt jd dS )z@Test that Newton or Halley don't warn if zero derivative at rootc                 S   s   | d | d  S Nr   r   r   r   r   r   r!   f_zeroder_root  r1   z9test_gh8904_zeroder_at_root_fails.<locals>.f_zeroder_rootr   rD  r   r   c                 S   s   d| d  d|   S r\  r   r   r   r   r!   fder  r#   z/test_gh8904_zeroder_at_root_fails.<locals>.fderc                 S   s   d|  d S )Nr  r   r   r   r   r   r!   fder2  r'   z0test_gh8904_zeroder_at_root_fails.<locals>.fder2)r7   rZ   )r7   rZ   r[   r   N)rH   r   r   _xtol_rtol)r]  rU   r^  r_  r   r   r!   !test_gh8904_zeroder_at_root_fails  s.   
rb  c                     sn   d  fdd}  fdd} fdd}d}t | ||d	d
\}}|js%J t | |||d	d\}}|js5J dS )zzTest that Halley's method realizes that the 2nd order adjustment
    is too big and drops off to the 1st order adjustment.r  c                    s   t | d  t  d   S r   r
   r   nr   r!   r9     s   ztest_gh_8881.<locals>.fc                    s   t | d      S r   rc  r   rd  r   r!   fp  r.   ztest_gh_8881.<locals>.fpc                    s*   t | dd     d   d     S rG  rc  r   rd  r   r!   fpp  s   *ztest_gh_8881.<locals>.fppr  T)rZ   r>   rZ   r[   r>   N)r   rd   )r9   rf  rg  r7   rtrU   r   rd  r!   test_gh_8881  s   
rj  c            	      C   s   dd } dd }dd }t jdgt jd}t| |||d	d
\}}|js%J t jddgt jd}tt tj| |||d	d
}W d   n1 sIw   Y  dd }tj| |||d	d
}|j	 scJ dS )z_
    Test that shape is preserved for array inputs even if fprime or fprime2 is
    scalar
    c                 S   s   | d S r%   r   r   r   r   r!   r9     r  z,test_gh_9608_preserve_array_shape.<locals>.fc                 S   r   r%   r   r   r   r   r!   rf    r  z-test_gh_9608_preserve_array_shape.<locals>.fpc                 S   r   r%   r   r   r   r   r!   rg    r   z.test_gh_9608_preserve_array_shape.<locals>.fppr!  r#  Trh  Nc                 S   s   t jt | dt jdS )Nr   rk  )r   r   r  float32r   r   r   r!   	fpp_array  r=  z4test_gh_9608_preserve_array_shape.<locals>.fpp_array)
r   r   rm  r   rd   r   r   
IndexErrorrH   r   )	r9   rf  rg  r7   ri  rU   x0_arrayrw   rn  r   r   r!   !test_gh_9608_preserve_array_shape  s"   


rq  z maximum_iterations,flag_expectedr   rE  c                 C   sv   t jdd ddddd| ddd		}|d
 j|ksJ |t jkr)|d
 j| ks'J dS |t jkr7|d
 j| k s9J dS dS )z]
    Test that if the maximum iterations is exceeded that the flag is not
    converged.
    c                 S   s   d|  d |  d |  d S )Ng333333?gffffff@g333333@g      @r   r   r   r   r!   r     s    z6test_gh9254_flag_if_maxiter_exceeded.<locals>.<lambda>i   r   r   TFr=   r   N)rH   r-  r7  CONVERRr  	CONVERGED)maximum_iterationsflag_expectedrw   r   r   r!   $test_gh9254_flag_if_maxiter_exceeded  s   

rw  c                  C   s   dd } dd }t ttj| d|dd tjtdd	 t| d| W d
   n1 s,w   Y  t| tdd|}t|tdd d
S )zBTest that if disp is true then zero derivative raises RuntimeErrorc                 S   s   | |  d S Nr   r   r   r   r   r!   r9   (  r'   z/test_gh9551_raise_error_if_disp_true.<locals>.fc                 S   r   r%   r   r   r   r   r!   f_p+  r  z1test_gh9551_raise_error_if_disp_true.<locals>.f_pr   Fr  zY^Derivative was zero\. Failed to converge after \d+ iterations, value is [+-]?\d*\.\d+\.$r   Ng      $@r   )	r   r   rH   r   r   r   r  r   r   )r9   ry  r@   r   r   r!   $test_gh9551_raise_error_if_disp_true$  s   rz  solver_name)r-  r.  r   r   r   c                 C   sR   dd }t t| }tjtdd ||dd W d    d S 1 s"w   Y  d S )Nc                 S   s   t jS r,   )r   r   r   r   r   r!   r9   =  s   ztest_gh3089_8394.<locals>.fzThe function value at x...r   r   r   )getattrrH   r   r   r   )r{  r9   solverr   r   r!   test_gh3089_83948  s
   
"r~  rM   c                    sf    fdd d _ t d| d}|jdu sJ |jdsJ |j j ks'J t|j|jv s1J d S )Nc                    s     j d7  _ tjS rx  )_countr   r   r   r9   r   r!   r9   K  s   ztest_gh18171.<locals>.fr   )r   r   )r   rM   FzThe function value at x)r  r   rd   r7  
startswithr   strr@   )rM   r  r   r  r!   test_gh18171E  s   r  rs_interfaceTFc                    sh   |rdd nt t| } fdd d _| dddd}|r(|j jks&J d S |d	 j jks2J d S )
Nc                 [      t | ||fdS N)r   r   r9   r:   r;   rP   r   r   r!   r   ]  rz   z%test_function_calls.<locals>.<lambda>c                    s     j d7  _ | d d S )Nr   r   )callsr   r  r   r!   r9   `  s   ztest_function_calls.<locals>.fr   r   Tr   r   )r|  rH   r  r   )r{  r  r}  r  r   r  r!   test_function_callsW  s   
r  c                  C   s   dd } t jtdd t| dddd}W d	   n1 sw   Y  |jr(J |jd
ks/J t jtdd t| dddddd }W d	   n1 sLw   Y  |jrVJ |jd
ks]J d	S )zDTest that zero slope with secant method results in a converged=Falsec                 S   s   | t |  |   d S )NgQ?r   r   r   r   r!   lhsp  r=  z*test_gh_14486_converged_false.<locals>.lhsrF  r   rX   g333333ÿr   )rM   r7   r8   Nzconvergence errorFT)r7   r8   r?   r>   r   )r   r   r   r   rd   r7  r   )r  r  r   r   r!   test_gh_14486_converged_falsem  s   

r  c                 C   s   |rdd nt t| }dd }tjtdd ||ddd	d
 W d    n1 s)w   Y  ||ddd	d
}|r:|n|d }|jsCJ t|jddd ||dtdd	d
}|rY|n|d }|jsbJ t|jddd d S )Nc                 [   r  r  r  r  r   r   r!   r     rz   ztest_gh5584.<locals>.<lambda>c                 S   r   )NgN~hr   r   r   r   r!   r9     r  ztest_gh5584.<locals>.fz...must have different signsr   g      gٿTr   g?r   r   r   r   z-0.0)	r|  rH   r   r   r   rd   r   r@   r   )r{  r  r}  r9   r  r   r   r!   test_gh5584~  s    


r  c                  C   s   dd } d}t tj}tj| dd|d| d}| |}tj| dd|d| d}| |}||k s2J d	|d
 dd|dd}tjt|d tj| dd||d
 d W d    d S 1 s^w   Y  d S )Nc                 S   s   | d d|   d S )Nr   r   r   r   r   r   r   r!   r9     r#   ztest_gh13407.<locals>.fgYng|=g    _Br   rl   r   zrtol too small \(r   gz < z\)r   )	r   r	   r   r   rH   r   r   r   r   )r9   r]   r   r8   r"   x4f4r   r   r   r!   test_gh13407  s   "r  c                  C   sD   dd } t | d}t|ddd t| dddd	}t|jddd d S )
Nc                 S   s   | d S rx  r   )r   r   r   r!   r9     r  z&test_newton_complex_gh10103.<locals>.fy      ?      ?r   g-q=r   y       @      ?rX   )r7   r8   rM   )r   r   r   r@   )r9   r  r   r   r!   test_newton_complex_gh10103  s
   
r  c                 C   sH   d}t jt|d | tdddd W d    d S 1 sw   Y  d S )Nz2'float' object cannot be interpreted as an integerr   r   r   gR@)r  )r   r   r>  r"   )rM   r   r   r   r!   test_maxiter_int_check_gh10236  s   "r  )Sr   	functoolsr   numpy.testingr   r   r   r   r   r   numpyr   r	   r
   r   r   r   r   r   r   scipyr   scipy.optimizer   rH   r   r   r   scipy._lib._utilr   r{   scipy.optimize._tstutilsr   r   r   r   r   r(  r,  r   r   r-  r.  r   r   gradient_methodsall_methodsr"   r&   r+   r-   r0   r3   r4   r5   r6   r   r   r*  r/  r3  r4  rB  r   r&  rM  r[  rb  rj  rq  r   rs  rt  rw  rz  r~  r  r  r  r  r  r  r  r   r   r   r!   <module>   s     (

a@  
 
"0"




