o
    h                     @   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   Z/var/www/html/scripts/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      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   
_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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   rX   fprime)rX   fprime2tolxtolrtolc                    s*   g | ]}t j|fd  qS ))rM   rN   )listrV   ).0rK   )rO   rL   rJ   rM   rN   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   rd   
known_failr   r    r`      s     c                 S   s   g | ]}|d  d qS rg   r   rd   r   r   r    r`      s    r   r\   r]   c                 S   s   g | ]	}|d  j r|qS ra   rb   rd   r   r   r    r`      rf   c                 S   s   g | ]}|d  j qS ra   r?   rd   r   r   r    r`      s    c                 S   s   g | ]}|d  qS r   r   rd   r   r   r    r`      s    c                    s<   g | ]\}}}t || d s|d d vr|g| qS ))r]   atolrA   rh   )r   )r_   r9   cre   )rn   rj   r]   r   r    r`      s    c                 S   s2   g | ]\}}}}|d  |g| dt R  qS )r8   r@   )rB   tuple)r_   arootro   fulloutrK   r   r   r    r`      s    
"c                 S   s"   g | ]\}}|d kr|g| qS rm   r   )r_   fvre   r   r   r    r`      s   " r   )_getfullargspecr   
kwonlyargslendefaultsr@   rC   r\   r]   r   rE   rB   zip)rJ   testsrL   namerj   rO   sig	nDefaults	nRequiredresultsnotcvgdnotcvged_IDStolscvgdapproxcorrectnotclosefvsr   )rn   rj   rO   rL   r]   rJ   rM   rN   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.
smoothnessrj   N)r   r   )rJ   
collectionrL   rz   r   rj   rO   ry   r   r   r    run_collection   s   z$TestScalarRootFinders.run_collection)NNr+   )__name__
__module____qualname__npr	   floatepsr\   r]   rV   r   r   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 )TestBracketMethodsrL   functionc                 C   sP   dt d}}t||j||g|| j| jd}|jsJ t|jd| j| jd d S )N      ?   )rL   bracketr6   r\   r]         ?rn   r]   )r   r   r   r\   r]   rc   r   r?   )rJ   rL   r   r9   r:   rT   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]   rc   r   )rJ   rL   r   r9   r:   r?   rT   r   r   r    test_basic_individual   s   

z(TestBracketMethods.test_basic_individualc                 C   s   | j d||jdd d S )Napsr   r   )r   r   )rJ   rL   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chandrupatlari   )rG   ridderr   r   )rJ   rL   rj   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   rc   r   )rJ   rL   r9   r:   r?   rT   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   r   rj   r   rG   r   rJ   rj   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   rX   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   rn      )r7   r[   )rY   r[   )rY   rZ   r[   )	r!   r%   r*   r/   r2   r3   rG   r   r   )rJ   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   )rL   r6   rY   r\   r   r   rL   r6   r\   N	r!   r%   r*   r/   r2   r3   r   r   r?   rJ   r8   r   r   rT   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()rW   r   r   r   rL   r6   r7   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()rX   r   r   )rL   r6   rY   rZ   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matchrX   r   r   )rL   rY   r6   r\   z#fprime must be specified for halley)rL   rZ   r6   r\   )r   raises
ValueErrorr   r!   r%   r*   )rJ   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!@)rZ   r@   N)r   arrayr   rangerG   r   r   )
rJ   r!   r%   r*   a0a1r@   r6   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    r8   7  r&   z/TestNewton.test_array_newton_complex.<locals>.fc                 S      dS Nr   r   r   r   r   r    rY   :     z4TestNewton.test_array_newton_complex.<locals>.fprimer   r   )rY           )r   fullrG   r   r   ones)rJ   r8   rY   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   rJ   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?   zero_derallrc   any)rJ   r~   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   )rL   r6   rY   T:0yE>r   r   rX   )rL   r6   rY   rZ   )rL   r6   rZ   )r   r   r?   r   function_calls)rJ   r!   r%   r*   r,   sol0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)r[   r=   rY   rZ   r>   Fr   r   )maxiterr>   z3Failed to converge after %d iterations, value is .*r   )r   r%   r*   rG   r   r!   r   rc   r   r?   
iterationsr   r   r   RuntimeError)
rJ   r6   expected_countsderivsrO   rQ   vr   rT   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   )rJ   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   )rJ   r6   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   rW   r   r   T)r6   r7   r[   r=   r   r   r   )	r   r!   r   r   r?   shaperp   r   r   )rJ   res_newton_defaultres_secant_default
res_secantr   r   r    test_gh17570_defaults  s2   
z TestNewton.test_gh17570_defaultsrL   rW   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   rL   g;f?)r   rc   r   absr?   dtyper   float64)rJ   rL   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   rl   r   r    r8     r  ztest_gh_5555.<locals>.fg    חg    cArk   z	method %s)rn   r]   err_msg)rG   r   r   TOLr   r   )r8   methodsr\   r]   rL   r  r   rl   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   rk   r  r   )
_FLOAT_EPSrG   brentqbrenthr   )r8   rn   r]   r  rL   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   ro   r   r    r     s    z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>)r   r   rG   r  r  r   )underflow_scenariooverflow_scenarior9   r:   r?   rL   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   reprrT   )rJ   expected_reprr   r   r    	test_repr  s   zTestRootResults.test_reprc                 C   s   t | jtsJ d S r+   )
isinstancerT   r   )rJ   r   r   r    	test_type  r"   zTestRootResults.test_typeN)r   r   r   rG   rH   rT   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   )rv   	TypeError)r   r9   retvalsizer   r   r    r   $  s   
z test_complex_halley.<locals>.f_2r   r)   )r)   g      @r   r   )r@   rY   rZ   r[   r   r   r   N)r   rG   r   r   )r8   r   r   r   coeffsr   r   r   r    test_complex_halley  s   
	
r2  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   r3  Nr   r   r   r   r   r   r    r   K  r   F)r6   r>   r   r   c                 S   r3  r7  r   r   r   r   r    r   N  r   Tg.ЗK.c                 S      | d d S r7  r   r   r   r   r    r   R  r   rA   c                 S   r8  r7  r   r   r   r   r    r   U  r   )r   r	   r   r   r   filterr   rG   r   r   r   r   r   )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)darcy_frictionredia	roughnessr   r    colebrook_eqne  s
   z1test_array_newton_failures.<locals>.colebrook_eqn){Gz?g?gvÖ?g333333?r   T)r6   r   r@   r=   NrE  )	r   r   r   rG   r   rc   r   r   r   )diameterrhomuureynolds_numberrD  resultr   rB  r    test_array_newton_failuresX  s(   
"rL  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   r4  r   r   c                 S   s   d| d  d|   S rM  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   rY   )r6   rY   rZ   r   N)rG   r   r   _xtol_rtol)rN  rT   rO  rP  r   r   r    !test_gh8904_zeroder_at_root_failsz  s.   
rS  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   rT  r   rU  r   r    fp  r-   ztest_gh_8881.<locals>.fpc                    s*   t | dd     d   d     S r7  rT  r   rU  r   r    fpp  s   *ztest_gh_8881.<locals>.fppr  T)rY   r=   rY   rZ   r=   N)r   rc   )r8   rW  rX  r6   rtrT   r   rU  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    rW    r  z-test_gh_9608_preserve_array_shape.<locals>.fpc                 S   r   r$   r   r   r   r   r    rX    r   z.test_gh_9608_preserve_array_shape.<locals>.fppr  r  TrY  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   r^  r   rc   r   r   
IndexErrorrG   r   )	r8   rW  rX  r6   rZ  rT   x0_arrayrK  r_  r   r   r    !test_gh_9608_preserve_array_shape  s"   


rb  z maximum_iterations,flag_expectedr   r5  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)maximum_iterationsflag_expectedrK  r   r   r    $test_gh9254_flag_if_maxiter_exceeded  s   

rh  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   rj  r?   r   r   r    $test_gh9551_raise_error_if_disp_true  s   rk  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   )rl  r8   solverr   r   r    test_gh3089_8394  s
   
"ro  rL   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 ri  )_countr   r   r   r8   r   r    r8      s   ztest_gh18171.<locals>.fr   )r   r   )r   rL   FzThe function value at x)rp  r   rc   r'  
startswithr   strr?   )rL   r  r   rq  r    test_gh18171  s   rt  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:   rO   r   r   r    r   2  r   z%test_function_calls.<locals>.<lambda>c                    s     j d7  _ | d d S )Nr   r   )callsr   rq  r   r    r8   5  s   ztest_function_calls.<locals>.fr   r   Tr   r   )rm  rG   rz  r   )rl  ru  rn  r  r   rq  r    test_function_calls,  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    lhsD  r-  z*test_gh_14486_converged_false.<locals>.lhsr6  r   rW   g333333ÿr   )rL   r6   r7   Nzconvergence errorFT)r6   r7   r>   r=   r   )r   r   r   r   rc   r'  r   )r|  r  r   r   r    test_gh_14486_converged_falseB  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                 [   rv  rw  rx  ry  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)	rm  rG   r   r   r   rc   r   r?   r   )rl  ru  rn  r8   r  r   r   r    test_gh5584R  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    r8   u  r"   ztest_gh13407.<locals>.fgYng|=g    _Br   rk   r   zrtol too small \(r   gz < z\)r   )	r   r	   r   r   rG   r   r   r   r   )r8   r\   r   r7   r!   x4f4r   r   r   r    test_gh13407o  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 ri  r   )r   r   r   r    r8     r  z&test_newton_complex_gh10103.<locals>.fy      ?      ?r   g-q=r   y       @      ?rW   )r6   r7   rL   )r   r   r   r?   )r8   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!   )rL   r   r   r   r    test_maxiter_int_check_gh10236  s   "r  )Pr   	functoolsr   numpy.testingr   r   r   r   r   r   numpyr   r	   r
   r   r   r   r   r   r   scipy.optimizer   rG   r   r   r   scipy._lib._utilr   rt   scipy.optimize._tstutilsr   r   r   r   r   r  r  r   r   r  r  r   r   gradient_methodsall_methodsr!   r%   r*   r,   r/   r2   r3   r4   r5   r   r   r  r  r#  r$  r2  r=  rL  rS  r[  rb  r   r   rd  re  rh  rk  ro  rt  r{  r}  r~  r  r  r  r   r   r   r    <module>   s     (

\0   "0"


