o
    Ö­j˜�  ã                   @   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   ú\/var/www/html/CropPilot/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 )zÒRun 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~�EO¡5@g$ÇJŠ— ÷?g~5È,ì@gXCÚ­Ø@gÍ®9@@g¬¹’Ó�®@é
   r    g      @g•Ö&è.>gü©ñÒMbp?gn‹2d’Ñ?)
gÔ©áË°@g9~¨4bŠ'@g’¹�a©q(@géŽ0Òp@gk"zçò?g€4s³eÂ?gU+ïñF@gw´»Qu%@gd¬6ÿ¯‚)@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Õ   )gÚNO±Þû@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ç:Œ0âŽyE>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r¸d|
 }tjt|d�� tjt|f|
ddœ|¤Ž\}}	W d   ƒ n1 s³w   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s‹J ‚ 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  )Néþÿÿÿr   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�   gš™™™™™¹¿ç333333ã?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     àuÀg      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 sƒw   Y  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	  ƒ d	S 1 sÏw   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   Néd   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?g�•C‹lç@c              	      s6   dt  | ¡ dt  ˆ d | d| t  | ¡  ¡  S )Nr   r   gš™™™™™@g®Gáz@)r—   r   Úlog10)Údarcy_frictionÚreÚdia©Ú	roughnessr   r!   Úcolebrook_eqnŽ  s
   ÿÿz1test_array_newton_failures.<locals>.colebrook_eqn)ç{®Gáz„?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 )NgìQ¸…ë±?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ö   )Ng¬÷N’~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"þ

ÿ
ÿ
ÿ
ÿ