o
    i                     @   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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 Z.dd Z/dd Z0dd Z1dd Z2dd Z3edd Z4G dd dZ5G dd de5Z6G dd de5Z7dd  Z8d!d" Z9d#d$ Z:G d%d& d&Z;d'd( Z<d)d* Z=d+d, Z>d-d. Z?d/d0 Z@d1d2 ZAe jBCd3d4ejDfd5ejEfgd6d7 ZFd8d9 ZGe jBCd:g d;d<d= ZHe jBCd>g d;d?d@ ZIe jBCd:g d;e jBCdAdBdCgdDdE ZJdFdG ZKe jBCd:g d;e jBCdAdBdCgdHdI ZLdJdK ZMdLdM ZNe jBCd>e,dNdO ZOdS )P    N)	lru_cache)assert_warnsassert_assert_allcloseassert_equalassert_array_equalsuppress_warnings)finfopowernanisclosesqrtexpsincos)	_zeros_pynewtonroot_scalarOptimizeResult)getfullargspec_no_self)	get_tests	functions   c                 C      | d d|   d S N       xr   r   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/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      r/   c                 C      t | t|  S r+   )r   r   r   r   r   r    f2_16   r0   r2   c                 C   r1   r+   r.   r   r   r   r    f2_2:   r0   r3   c                 C   s   | S r+   r   r   r   r   r    f_lrucached?   s   r4   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yk   |	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   Z
_EVALUEERR)selftcmethodsig_args_keyssig_kwargs_keyskwargsZmethod_argskZmethod_kwargsr?   Z	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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   rT   fprime)rT   fprime2tolxtolrtolc                    s*   g | ]}t j|fd  qS ))rL   rM   )listrR   ).0rJ   )rN   rK   rI   rL   rM   r   r    
<listcomp>y   s    z3TestScalarRootFinders.run_tests.<locals>.<listcomp>c                 S   s   g | ]	}|d  j s|qS r   	convergedr[   eltr   r   r    r\          c                    s    g | ]}|d  d  vr|qS rA   IDr   r`   
known_failr   r    r\      s     c                 S   s   g | ]}|d  d qS rc   r   r`   r   r   r    r\      s    r   rX   rY   c                 S   s   g | ]	}|d  j r|qS r]   r^   r`   r   r   r    r\      rb   c                 S   s   g | ]}|d  j qS r]   r?   r`   r   r   r    r\      s    c                 S   s   g | ]}|d  qS r   r   r`   r   r   r    r\      s    c                    s<   g | ]\}}}t || d s|d d vr|g| qS ))rY   atolrA   rd   )r   )r[   r9   cra   )rj   rf   rY   r   r    r\      s    c                 S   s2   g | ]\}}}}|d  |g| dt R  qS )r8   r@   )rB   tuple)r[   Zarootrk   ZfulloutrJ   r   r   r    r\      s    
"c                 S   s"   g | ]\}}|d kr|g| qS ri   r   )r[   Zfvra   r   r   r    r\      s   " r   )_getfullargspecr   
kwonlyargslendefaultsr@   rC   rX   rY   r   rE   rB   zip)rI   testsrK   namerf   rN   sigZ	nDefaultsZ	nRequiredresultsZnotcvgdZnotcvged_IDSZtolsZcvgdZapproxZcorrectZnotcloseZfvsr   )rj   rf   rN   rK   rY   rI   rL   rM   r    	run_testsa   sF   




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.
smoothnessrf   N)r   rv   )rI   
collectionrK   rs   rx   rf   rN   rr   r   r   r    run_collection   s   z$TestScalarRootFinders.run_collection)NNr+   )__name__
__module____qualname__npr	   floatepsrX   rY   rR   rv   rz   r   r   r   r    r5   D   s    

6r5   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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 )TestBracketMethodsrK   functionc                 C   sP   dt d}}t||j||g|| j| jd}|jsJ t|jd| j| jd d S )N      ?   )rK   bracketr6   rX   rY         ?rj   rY   )r   r   r{   rX   rY   r_   r   r?   )rI   rK   r   r9   r:   rP   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)rX   rY   r=   r   r   )r   rX   rY   r_   r   )rI   rK   r   r9   r:   r?   rP   r   r   r    test_basic_individual   s   

z(TestBracketMethods.test_basic_individualc                 C   s   | j d||jdd d S )Napsr   rw   )rz   r{   )rI   rK   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.4Zchandrupatlare   )rG   ridderrz   r{   )rI   rK   rf   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)rA   r   Tr=   r   )r4   r_   r   )rI   rK   r9   r:   r?   rP   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   rG   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dd Zdd Zdd Zdd Zdd  Z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   rx   rf   rz   rG   r   rI   rf   ry   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   rT   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   ư>)rW   r   rj      )r7   rW   )rU   rW   )rU   rV   rW   )	r!   r%   r*   r/   r2   r3   rG   r   r   )rI   r8   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   )rK   r6   rU   rX   r   r   rK   r6   rX   N	r!   r%   r*   r/   r2   r3   r   r   r?   rI   r8   r   r   rP   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()rS   r   r   r   rK   r6   r7   rX   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()rT   r   r   )rK   r6   rU   rV   rX   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matchrT   r   r   )rK   rU   r6   rX   z#fprime must be specified for halley)rK   rV   r6   rX   )r   raises
ValueErrorr   r!   r%   r*   )rI   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   r9   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!@)rV   r@   N)r~   arrayr   rangerG   r   r   )
rI   r!   r%   r*   Za0Za1r@   r6   r   Z
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    r8   7  r&   z/TestNewton.test_array_newton_complex.<locals>.fc                 S      dS Nr   r   r   r   r   r    rU   :     z4TestNewton.test_array_newton_complex.<locals>.fprimer   r   )rU           )r~   fullrG   r   r   Zones)rI   r8   rU   tr   r   r   r    test_array_newton_complex6  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   r9   r   r   r    <lambda>K      z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>gˡE}@r         )r6   r@   )f~@g      @N)rG   r   r~   r   r   rI   r   r   r   r    !test_array_secant_active_zero_derI  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   Q      z7TestNewton.test_array_newton_integers.<locals>.<lambda>      @r   g      .@g      1@r   )gNO@r   c                 S   r   r$   r   r   r   r   r    r   U  r   r      r   )rG   r   r   r   r   r   r    test_array_newton_integersO  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   [  r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>r   c                 S      d|  S r$   r   r   r   r   r    r   [      c                 S   r   r$   r   r   r   r   r    r   ^  r   c                 S   r   r$   r   r   r   r   r    r   _  r   Tr   r   )r   RuntimeWarningrG   r   r   warnsr   r?   Zzero_derallr_   any)rI   ru   r   r   r    #test_array_newton_zero_der_failuresX  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!   e  r"   z+TestNewton.test_newton_combined.<locals>.f1c                 S   r#   r$   r   r   r   r   r    r%   g  r&   z-TestNewton.test_newton_combined.<locals>.f1_1c                 S   r'   r(   r   r   r   r   r    r*   i  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,   l  s   "z8TestNewton.test_newton_combined.<locals>.f1_and_p_and_ppr   r   )rK   r6   rU   T:0yE>r   r   rT   )rK   r6   rU   rV   )rK   r6   rV   )r   r   r?   r   function_calls)rI   r!   r%   r*   r,   Zsol0Zsolr   r   r    test_newton_combinedd  s   zTestNewton.test_newton_combinedc           
   	   C   sr  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rtjtd|	 d tjt|f|	dd|\}}W d    n1 sw   Y  q
d S )Nr   ))      )r   r   )r   	   r   T)rW   r=   rU   rV   r>   Fr   r   )maxiterr>   z3Failed to converge after %d iterations, value is .*r   )r   r%   r*   rG   r   r!   r   r_   r   r?   
iterationsr   r   r   RuntimeError)
rI   r6   Zexpected_countsZderivsrN   rO   vr   rP   Zitersr   r   r    test_newton_full_outputy  s6   
 


 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   rG   r   r   r   r   )rI   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   )rI   r6   Zx0_copyr   r   r    test_newton_does_not_modify_x0  s   z)TestNewton.test_newton_does_not_modify_x0c                 C   s  t tdddd}t tddddd}ttddddd	d
 }tt|jddd |jjt ks/J tt|jddd |jjt ksBJ tt|jddd |jjt ksUJ |j|j  krc|jksfJ  J |j|jd
   kr|j  kr|j  kr|jd ksJ  J d S )Nr   r   r   r   rS   r   r   T)r6   r7   rW   r=   r   r   r   )	r   r!   r   r   r?   shaperl   r   r   )rI   Zres_newton_defaultZres_secant_defaultZ
res_secantr   r   r    test_gh17570_defaults  s2   
z TestNewton.test_gh17570_defaultsrK   rS   r   c                 C   sL   dd }t |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    r8     s   z)TestNewton.test_int_x0_gh19280.<locals>.fr   )r6   rK   g;f?)r   r_   r   absr?   dtyper~   Zfloat64)rI   rK   r8   resr   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   r   r   r   r   r   r   r   r   r   r   r   r    r      s(    		'	%	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   rh   r   r    r8     r   ztest_gh_5555.<locals>.fg    חg    cArg   z	method %s)rj   rY   err_msg)rG   r   r   TOLr   r{   )r8   methodsrX   rY   rK   r   r   rh   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    r8     s   ztest_gh_5557.<locals>.fgRQ?r   r   r   rg   r   r   )
_FLOAT_EPSrG   brentqbrenthr   )r8   rj   rY   r   rK   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   rk   r   r    r     s    z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>)r~   r   rG   r   r   r   )Zunderflow_scenarioZoverflow_scenarior9   r:   r?   rK   r   r   r   r    'test_brent_underflow_in_root_bracketing   s   
r   c                   @   s.   e Zd ZejdddddZdd Zdd	 Zd
S )TestRootResultsr   ,   .   r   )r?   r   r   flagc                 C   s   d}t t| j| d S )Nzm      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0)r   reprrP   )rI   Zexpected_reprr   r   r    	test_repr  s   zTestRootResults.test_reprc                 C   s   t | jtsJ d S r+   )
isinstancerP   r   )rI   r   r   r    	test_type  r"   zTestRootResults.test_typeN)r{   r|   r}   rG   rH   rP   r  r  r   r   r   r    r    s    r  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    r8     s   $ztest_complex_halley.<locals>.fc                 W   s   d|d  |  |d  S )Nr   r   r   r   r   r   r   r    r   !     z test_complex_halley.<locals>.f_1c                 W   s:   d|d  }zt | }W n ty   | Y S w |g| S )Nr   r   )ro   	TypeError)r   r9   retvalsizer   r   r    r   $  s   
z test_complex_halley.<locals>.f_2r   r)   )r)   g      @r   r   )r@   rU   rV   rW   r   r   r   N)r   rG   r   r   )r8   r   r   r   Zcoeffsr   r   r   r    test_complex_halley  s   
	
r  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   E  r   z%test_zero_der_nz_dp.<locals>.<lambda>r   r6   Nd   g.ЗK.?Tolerance ofc                 S   r  Nr   r   r   r   r   r   r    r   K  r   F)r6   r>   r   r   c                 S   r  r  r   r   r   r   r    r   N  r   Tg.ЗK.c                 S      | d d S r  r   r   r   r   r    r   R  r   rA   c                 S   r  r  r   r   r   r   r    r   U  r   )r~   r	   r   r   r   filterr   rG   r   r   r   r   r   )Zdxp0supr   r   r   r    test_zero_der_nz_dp8  s2   

"r  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)Zdarcy_frictionreZdiaZ	roughnessr   r    colebrook_eqne  s
   z1test_array_newton_failures.<locals>.colebrook_eqn){Gz?g?gvÖ?g333333?r   T)r6   r   r@   r=   Nr  )	r   r   r   rG   r   r_   r   r   r   )ZdiameterrhomuuZreynolds_numberr  resultr   r  r    test_array_newton_failuresX  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~  r0   z9test_gh8904_zeroder_at_root_fails.<locals>.f_zeroder_rootr   r  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)r6   rU   )r6   rU   rV   r   N)rG   r   r   Z_xtolZ_rtol)r#  rP   r$  r%  r   r   r    !test_gh8904_zeroder_at_root_failsz  s.   
r&  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    r8     s   ztest_gh_8881.<locals>.fc                    s   t | d      S r   r'  r   r(  r   r    fp  r-   ztest_gh_8881.<locals>.fpc                    s*   t | dd     d   d     S r  r'  r   r(  r   r    fpp  s   *ztest_gh_8881.<locals>.fppr   T)rU   r=   rU   rV   r=   N)r   r_   )r8   r*  r+  r6   rtrP   r   r(  r    test_gh_8881  s   
r.  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    r8     r   z,test_gh_9608_preserve_array_shape.<locals>.fc                 S   r   r$   r   r   r   r   r    r*    r   z-test_gh_9608_preserve_array_shape.<locals>.fpc                 S   r   r$   r   r   r   r   r    r+    r   z.test_gh_9608_preserve_array_shape.<locals>.fppr   r   Tr,  Nc                 S   s   t jt | dt jdS )Nr   r/  )r~   r   r   float32r   r   r   r    	fpp_array  r	  z4test_gh_9608_preserve_array_shape.<locals>.fpp_array)
r~   r   r1  r   r_   r   r   
IndexErrorrG   r   )	r8   r*  r+  r6   r-  rP   Zx0_arrayr   r2  r   r   r    !test_gh_9608_preserve_array_shape  s"   


r4  z maximum_iterations,flag_expectedr   r  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)rG   r   r  CONVERRr   	CONVERGED)Zmaximum_iterationsZflag_expectedr   r   r   r    $test_gh9254_flag_if_maxiter_exceeded  s   

r8  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    r8     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   rG   r   r   r   r   r   r   )r8   r:  r?   r   r   r    $test_gh9551_raise_error_if_disp_true  s   r;  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    r8     s   ztest_gh3089_8394.<locals>.fzThe function value at x...r   r   r   )getattrrG   r   r   r   )r<  r8   solverr   r   r    test_gh3089_8394  s
   
"r?  rK   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 r9  )_countr~   r   r   r8   r   r    r8      s   ztest_gh18171.<locals>.fr   )r   r   )r   rK   FzThe function value at x)r@  r   r_   r  
startswithr   strr?   )rK   r   r   rA  r    test_gh18171  s   rD  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   r8   r9   r:   rN   r   r   r    r   2  r   z%test_function_calls.<locals>.<lambda>c                    s     j d7  _ | d d S )Nr   r   )callsr   rA  r   r    r8   5  s   ztest_function_calls.<locals>.fr   r   Tr   r   )r=  rG   rJ  r   )r<  rE  r>  r   r   rA  r    test_function_calls,  s   
rK  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    lhsD  r	  z*test_gh_14486_converged_false.<locals>.lhsr  r   rS   g333333ÿr   )rK   r6   r7   Nzconvergence errorFT)r6   r7   r>   r=   r   )r   r   r   r   r_   r  r   )rL  r   r   r   r    test_gh_14486_converged_falseB  s   

rM  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                 [   rF  rG  rH  rI  r   r   r    r   X  r   ztest_gh5584.<locals>.<lambda>c                 S   r   )NgN~hr   r   r   r   r    r8   [  r   ztest_gh5584.<locals>.fz...must have different signsr   g      gٿTr   g?r   r   r   r   z-0.0)	r=  rG   r   r   r   r_   r   r?   r   )r<  rE  r>  r8   r   r   r   r    test_gh5584R  s    


rN  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    r8   u  r"   ztest_gh13407.<locals>.fgYng|=g    _Br   rg   r   zrtol too small \(r   gz < z\)r   )	r~   r	   r   r   rG   r   r   r   r   )r8   rX   r   r7   r!   Zx4Zf4r   r   r   r    test_gh13407o  s   "rP  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 r9  r   )r   r   r   r    r8     r   z&test_newton_complex_gh10103.<locals>.fy      ?      ?r   g-q=r   y       @      ?rS   )r6   r7   rK   )r   r   r   r?   )r8   r   r   r   r    test_newton_complex_gh10103  s
   
rQ  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!   )rK   r   r   r   r    test_maxiter_int_check_gh10236  s   "rR  )Pr   	functoolsr   Znumpy.testingr   r   r   r   r   r   numpyr~   r	   r
   r   r   r   r   r   r   Zscipy.optimizer   rG   r   r   r   Zscipy._lib._utilr   rm   Zscipy.optimize._tstutilsr   r   r   r   r   r   r   r   r   r   r   r   r   Zgradient_methodsZall_methodsr!   r%   r*   r,   r/   r2   r3   r4   r5   r   r   r   r   r   r  r  r  r!  r&  r.  r4  r   r   r6  r7  r8  r;  r?  rD  rK  rM  rN  rP  rQ  rR  r   r   r   r    <module>   s     (

\0   "0"


