a
    ‡ù»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>d*d+„ Z?d,d-„ Z@d.d/„ ZAd0d1„ ZBd2d3„ ZCe jD Ed4d5ejFfd6ejGfg¡d7d8„ ƒZHd9d:„ ZIe jD Ed;g d<¢¡d=d>„ ƒZJe jD Ed?g d<¢¡d@dA„ ƒZKe jD Ed;g d<¢¡e jD EdBdCdDg¡dEdF„ ƒƒZLdGdH„ ZMe jD Ed;g d<¢¡e jD EdBdCdDg¡dIdJ„ ƒƒZNdKdL„ ZOdMdN„ ZPe jD Ed?e.¡dOdP„ ƒZQd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   s   | d d|   d S ©Né   é   © ©Úxr   r   úEE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test_zeros.pyÚf1!   s    r!   c                 C   s   d|  d S ©Nr   r   r   r   r   r    Úf1_1%   s    r#   c                 C   s   dd|   S ©Nç       @r   r   r   r   r   r    Úf1_2)   s    r&   c                 C   s   t | ƒt| ƒt| ƒfS ©N)r!   r#   r&   r   r   r   r    Úf1_and_p_and_pp-   s    r(   c                 C   s   t | ƒt| ƒ S r'   ©r   r   r   r   r   r    Úf22   s    r*   c                 C   s   t | ƒt| ƒ S r'   )r   r   r   r   r   r    Úf2_16   s    r+   c                 C   s   t | ƒt| ƒ S r'   r)   r   r   r   r    Úf2_2:   s    r,   c                 C   s   | S r'   r   r   r   r   r    Úf_lrucached?   s    r-   c                   @   sJ   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f i |¤Ž}| dddœ¡ |p`g D ]}|| ||< qb|  d¡}	|  d	d
¡}
z"||d	|
i|¤Ž\}}|	||fW S  tyØ   |	t tddtj|¡|f Y S 0 d S )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_kwargsr8   Z	func_argsÚrZ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 rvˆdv rjˆ d¡ ˆdv rjˆ d¡ ˆjˆd< nˆjˆd< ˆjˆd	< ‡‡‡‡‡fd
d„|D ƒ}	ˆpªg ‰dd„ |	D ƒ}
‡fdd„|
D ƒ}
dd„ |
D ƒ}t	t|ƒ|gdg gƒ ˆjˆjdœ}|j
f 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   rL   Úfprime)rL   Úfprime2ÚtolÚxtolÚrtolc                    s*   g | ]"}t ˆj|ˆfˆˆd œˆ ¤Žƒ‘qS ))rE   rF   )ÚlistrJ   )Ú.0rC   )rG   rD   rB   rE   rF   r   r    Ú
<listcomp>{   s   þÿþþz3TestScalarRootFinders.run_tests.<locals>.<listcomp>c                 S   s   g | ]}|d  j s|‘qS ©r   ©Ú	converged©rS   Úeltr   r   r    rT   �   ó    c                    s    g | ]}|d  d ˆ vr|‘qS ©r:   ÚIDr   rX   ©Ú
known_failr   r    rT   ‚   rZ   c                 S   s   g | ]}|d  d ‘qS r[   r   rX   r   r   r    rT   ƒ   rZ   r   ©rP   rQ   c                 S   s   g | ]}|d  j r|‘qS rU   rV   rX   r   r   r    rT   Œ   rZ   c                 S   s   g | ]}|d  j ‘qS rU   ©r8   rX   r   r   r    rT   �   rZ   c                 S   s   g | ]}|d  ‘qS ©r   r   rX   r   r   r    rT   Ž   rZ   c                    s<   g | ]4\}}}t ||ˆˆ d �s|d d ˆvr|g| ‘qS ))rQ   Úatolr:   r\   )r   )rS   r2   ÚcrY   )rb   r^   rQ   r   r    rT   �   s   þc                 S   s2   g | ]*\}}}}|d  |g|  dtƒ ¡¢R Ž ‘qS )r1   r9   )r;   Útuple)rS   Zarootrc   ZfulloutrC   r   r   r    rT   ”   s   
ÿc                 S   s"   g | ]\}}|d kr|g| ‘qS ra   r   )rS   ZfvrY   r   r   r    rT   –   rZ   c                 S   s   g | ]}|d  j ‘qS rU   )rD   )rS   Úresultr   r   r    rT   ˜   rZ   c                    s   g | ]}ˆ ‘qS r   r   )rS   Ú_)Únamer   r    rT   ™   rZ   )Ú_getfullargspecr   Ú
kwonlyargsÚlenÚdefaultsr9   r<   rP   rQ   r   r>   r;   Úzip)rB   ÚtestsrD   rg   r^   rG   ÚsigZ	nDefaultsZ	nRequiredÚresultsZnotcvgdZnotcvged_IDSZtolsZcvgdZapproxZcorrectZnotcloseZfvsZmethod_from_resultZexpected_methodr   )	rb   r^   rG   rD   rg   rQ   rB   rE   rF   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.©Ú
smoothnessr^   N)r   rp   )rB   Ú
collectionrD   rg   rr   r^   rG   rm   r   r   r    Úrun_collectionœ   s    z$TestScalarRootFinders.run_collection)NN)N)NN)Ú__name__Ú
__module__Ú__qualname__Únpr	   ÚfloatÚepsrP   rQ   rJ   rp   rt   r   r   r   r    r.   D   s     ÿ

;  ÿr.   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 )ÚTestBracketMethodsrD   Úfunctionc                 C   s`   dt dƒ }}t||j||g|| j| jd�}|js6J ‚t|jd| j| jd� |j|jks\J ‚d S )Nç      à?é   )rD   Úbracketr/   rP   rQ   ç      ð?©rb   rQ   )	r   r   ru   rP   rQ   rW   r   r8   rD   )rB   rD   r|   r2   r3   rI   r   r   r    Útest_basic_root_scalar¦   s    ÿ
z)TestBracketMethods.test_basic_root_scalarc                 C   sL   dt dƒ }}||||| j| jdd�\}}|js4J ‚t|d| j| jd� d S )Nr}   r~   T)rP   rQ   r6   r€   r�   )r   rP   rQ   rW   r   )rB   rD   r|   r2   r3   r8   rI   r   r   r    Útest_basic_individual´   s    ÿ

z(TestBracketMethods.test_basic_individualc                 C   s   | j d||jdd� d S )NÚapsr   rq   )rt   ru   )rB   rD   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chandrupatlar]   )r@   Úridderrt   ru   )rB   rD   r^   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)r:   r   T©r6   r   )r-   rW   r   )rB   rD   r2   r3   r8   rI   r   r   r    Útest_lru_cached_individualÌ   s    
z-TestBracketMethods.test_lru_cached_individualN)ru   rv   rw   ÚpytestÚmarkÚparametrizeÚbracket_methodsÚtstutils_functionsr‚   rƒ   r…   r@   Ú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#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   ©rr   r^   ©rt   r@   r   ©rB   r^   rs   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”   rL   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 ]š\}}}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~   ç�íµ ÷Æ°>)rO   r   ©rb   é   )r0   rO   )rM   rO   )rM   rN   rO   )	r!   r#   r&   r*   r+   r,   r@   r   r   )rB   r1   Ú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 ]0\}}}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� qZdS )	z#Invoke newton through root_scalar()r   r~   r›   )rD   r/   rM   rP   r   rœ   ©rD   r/   rP   N©	r!   r#   r&   r*   r+   r,   r   r   r8   ©rB   r1   rž   rŸ   rI   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 ]V\}}}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()rK   r~   r   r›   ©rD   r/   r0   rP   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 ]2\}}}t|dd||dd�}t||jƒddd� qdS )z#Invoke halley through root_scalar()rL   r~   r›   )rD   r/   rM   rN   rP   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:0    Y  d}t jt|d��" ttdtddd� W d   ƒ n1 s~0    Y  d S )	Nz$fprime2 must be specified for halley©ÚmatchrL   r~   r›   )rD   rM   r/   rP   z#fprime must be specified for halley)rD   rN   r/   rP   )rŠ   ÚraisesÚ
ValueErrorr   r!   r#   r&   )rB   Úmessager   r   r    Útest_root_scalar_fail  s    0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   ©rx   r   ©r   r2   r3   r   r   r    r!     s    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    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Ó!@)rN   ©r9   N)rx   Úarrayr   Úranger@   r   r   )
rB   r!   r#   r&   Za0Za1r9   r/   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    r1   =  s    z/TestNewton.test_array_newton_complex.<locals>.fc                 S   s   dS ©Nr€   r   r   r   r   r    rM   @  s    z4TestNewton.test_array_newton_complex.<locals>.fprimer   rµ   )rM   ç        )rx   Úfullr@   r   r   Zones)rB   r1   rM   Útr   r   r   r    Útest_array_newton_complex<  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   r2   r   r   r    Ú<lambda>Q  rZ   z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>gË¡E¶ó}@r�   é   é   ©r/   r9   )çí¯f~@g      @N)r@   r   rx   r²   r   ©rB   r   r   r   r    Ú!test_array_secant_active_zero_derO  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   s   || d  S r"   r   ©ÚyÚzr   r   r    r¼   W  rZ   z7TestNewton.test_array_newton_integers.<locals>.<lambda>ç      @r   g      .@g      1@r±   )gÚNO±Þû@rÀ   c                 S   s   || d  S r"   r   rÃ   r   r   r    r¼   [  rZ   r   é   r½   )r@   r   r   rÁ   r   r   r    Útest_array_newton_integersU  s    ÿ
 z%TestNewton.test_array_newton_integersc                 C   s’   t ttjdd„ ddgdd„ ƒ t t¡�V tjdd„ ddgdd„ dd�}t|jd	ƒ |j 	¡ sbJ ‚|j
 ¡ rpJ ‚W d   ƒ n1 s„0    Y  d S )
Nc                 S   s   | d d S r"   r   ©rÄ   r   r   r    r¼   a  rZ   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>r·   c                 S   s   d|  S r"   r   rÉ   r   r   r    r¼   a  rZ   c                 S   s   | d d S r"   r   rÉ   r   r   r    r¼   d  rZ   c                 S   s   d|  S r"   r   rÉ   r   r   r    r¼   e  rZ   Trˆ   r   )r   ÚRuntimeWarningr@   r   rŠ   Úwarnsr   r8   Zzero_derÚallrW   Úany)rB   ro   r   r   r    Ú#test_array_newton_zero_der_failures^  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   s   | d d|   d S r   r   r   r   r   r    r!   k  s    z+TestNewton.test_newton_combined.<locals>.f1c                 S   s   d|  d S r"   r   r   r   r   r    r#   m  s    z-TestNewton.test_newton_combined.<locals>.f1_1c                 S   s   dd|   S r$   r   r   r   r   r    r&   o  s    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(   r  s    z8TestNewton.test_newton_combined.<locals>.f1_and_p_and_ppr   r~   )rD   r/   rM   Tç:Œ0âŽyE>rœ   r   rL   )rD   r/   rM   rN   )rD   r/   rN   )r   r   r8   r   Úfunction_calls)rB   r!   r#   r&   r(   Zsol0Zsolr   r   r    Útest_newton_combinedj  s    zTestNewton.test_newton_combinedc              	   C   sz  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r´|	j|	j
d ksÊJ ‚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   ƒ q1 �sj0    Y  qd S )Nr~   ))é   é   )r�   r°   )r~   é	   r›   T)rO   r6   rM   rN   r7   Fr   r   )Úmaxiterr7   z3Failed to converge after %d iterations, value is .*r¨   )r³   r#   r&   r@   r   r!   r   rW   r   r8   Ú
iterationsrÐ   rŠ   rª   ÚRuntimeError)rB   Úcapsysr/   Zexpected_countsZderivsrG   rH   Úvr   rI   ZitersÚmsgr   r   r    Útest_newton_full_output  s,    
 


z"TestNewton.test_newton_full_outputc                 C   sf   dd„ }dd„ }t ttj|d|dd� tjtdd	�� t |d|¡ W d   ƒ n1 sX0    Y  d S )
Nc                 S   s   | d d S )Nr   r%   r   r   r   r   r    r4   ¤  s    z0TestNewton.test_deriv_zero_warning.<locals>.funcc                 S   s   d|  S r"   r   r   r   r   r    Údfunc¦  s    z1TestNewton.test_deriv_zero_warning.<locals>.dfuncr·   F©r7   zDerivative was zeror¨   )r   rÊ   r@   r   rŠ   rª   r×   )rB   r4   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~   )rx   r²   Úcopyr   r   r   r   )rB   r/   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s„J ‚tt|jƒddd� |jjtƒ ksªJ ‚|j|j  krÄ|jksÊn J ‚|j|jd
   k�r|j  k�r|j  k�r|jd k�sn J ‚d S )Nr   r~   r›   r¡   rK   r   r¥   T)r/   r0   rO   r6   r   r   rœ   )	r   r!   r   r   r8   Úshaperd   rÖ   rÐ   )rB   Zres_newton_defaultZres_secant_defaultZ
res_secantr   r   r    Útest_gh17570_defaults³  s2    
ÿÿþÿ
þ
ý
üz TestNewton.test_gh17570_defaultsrG   rD   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    r1   Ò  s    z'TestNewton.test_args_gh19090.<locals>.fr~   )r~   r   r¿   r   )r   r   rW   r   r8   )rB   rG   r1   Úresr   r   r    Útest_args_gh19090Ð  s    
zTestNewton.test_args_gh19090rK   c                 C   sN   dd„ }t j|d|d�}|js"J ‚tt|jƒdƒ |jjt tj¡ksJJ ‚d S )Nc                 S   s   | d d S )Néþÿÿÿr   r   r   r   r   r    r1   à  s    z)TestNewton.test_int_x0_gh19280.<locals>.fr   )r/   rD   gÍ;fž æ?)	r   r   rW   r   Úabsr8   Údtyperx   Zfloat64)rB   rD   r1   rä   r   r   r    Útest_int_x0_gh19280Û  s
    
zTestNewton.test_int_x0_gh19280N)ru   rv   rw   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   r`   r   r    r1   í  s    ztest_gh_5555.<locals>.fg    „×—Ág    ÐcAr_   z	method %s)rb   rQ   Úerr_msg)r@   r�   r†   ÚTOLr   ru   )r1   ÚmethodsrP   rQ   rD   rä   r   r`   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 d S )Nr}   gš™™™™™¹¿ç333333ã?r   r   r   r   r    r1     s    ztest_gh_5557.<locals>.fgR¸…ëQà?r   r   r   r_   rî   r�   )Ú
_FLOAT_EPSr@   ÚbrentqÚbrenthr   )r1   rb   rQ   rì   rD   rä   r   r   r    Útest_gh_5557ø  s    
rò   c                     sZ   d} d}| |fD ]D\}}}t  |¡‰ tjtjfD ]"}|‡ fdd„||ƒ}t||ƒ q0qd S )N)g      |Àg     àuÀg      yÀ)g     àu@g      |@g      y@c                    s   t  | ¡ˆ  S r'   r®   r   ©rc   r   r    r¼     rZ   z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>)rx   r   r@   rñ   rð   r   )Zunderflow_scenarioZoverflow_scenarior2   r3   r8   rD   rä   r   ró   r    Ú'test_brent_underflow_in_root_bracketing  s    
rô   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   )r8   rÖ   rÐ   ÚflagrD   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   ÚreprrI   )rB   Zexpected_reprr   r   r    Ú	test_repr#  s    zTestRootResults.test_reprc                 C   s   t | jtƒsJ ‚d S r'   )Ú
isinstancerI   r   )rB   r   r   r    Ú	test_type)  s    zTestRootResults.test_typeN)ru   rv   rw   r@   rA   rI   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    r1   /  s    ztest_complex_halley.<locals>.fc                 W   s   d|d  |  |d  S )Nr   r   r   r   r»   r   r   r    rž   2  s    z test_complex_halley.<locals>.f_1c                 W   s>   d|d  }zt | ƒ}W n ty.   | Y S 0 |g| S d S )Nr   r   )rj   Ú	TypeError)r   r2   ÚretvalÚsizer   r   r    rŸ   5  s    
z test_complex_halley.<locals>.f_2r€   r%   )r%   g      @rÆ   r›   )r9   rM   rN   rO   r   rœ   r°   N)r•   r@   r   r   )r1   rž   rŸ   rÅ   ZcoeffsrÄ   r   r   r    Útest_complex_halley-  s    	

r   c                 C   s°  t  t¡jd }d| d|  }tƒ �4}| td¡ tjdd„ |gd d�}W d	  ƒ n1 s`0    Y  t	|d
gd ƒ d}tƒ �0}| td¡ tjdd„ |dd�}W d	  ƒ n1 sº0    Y  t	|dƒ t
jtdd��$ tjdd„ |dd�}W d	  ƒ n1 �s0    Y  d}tƒ �0}| td¡ tjdd„ |dd�}W d	  ƒ n1 �sT0    Y  t	|dƒ t
jtdd��$ tjdd„ |dd�}W d	  ƒ n1 �s¢0    Y  d	S )zBTest secant method with a non-zero dp, but an infinite newton stepg…ëQ¸Õ?g      i@r%   zRMS ofc                 S   s   | d d S )Ng      Y@r   r   rÉ   r   r   r    r¼   V  rZ   z%test_zero_der_nz_dp.<locals>.<lambda>r°   ©r/   Néd   g.Ð—K.ÿï?úTolerance ofc                 S   s   | d d S ©Nr€   r   r   rÉ   r   r   r    r¼   \  rZ   F)r/   r7   r   r¨   c                 S   s   | d d S r  r   rÉ   r   r   r    r¼   _  rZ   Tg.Ð—K.ÿï¿c                 S   s   | d d S r  r   rÉ   r   r   r    r¼   c  rZ   r:   c                 S   s   | d d S r  r   rÉ   r   r   r    r¼   f  rZ   )rx   r	   ry   rz   r   ÚfilterrÊ   r@   r   r   rŠ   rª   r×   )rØ   ZdxÚp0Úsupr   r   r   r    Útest_zero_der_nz_dpI  s(    62
44
r  c                     sÐ   d} d‰ d}d}d}|| |  | }‡ fdd„}t  t¡�: tj|g d¢d	|| gd
d�}|j ¡ rfJ ‚W d  ƒ n1 sz0    Y  t  t¡�. tj|dgd	 d	|| gd
d�}W d  ƒ n1 sÂ0    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@)rx   r   Úlog10)Zdarcy_frictionÚreZdia©Z	roughnessr   r    Úcolebrook_eqnv  s
    ÿÿz1test_array_newton_failures.<locals>.colebrook_eqn)ç{®Gáz„?gš™™™™™É?gˆ×õvÃ–?g333333Ó?r   T)r/   rÕ   r9   r6   Nr  )	rŠ   rË   rÊ   r@   r   rW   rÌ   rª   r×   )ZdiameterÚrhoÚmuÚuZreynolds_numberr  re   r   r  r    Útest_array_newton_failuresi  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�  s    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š  s    z/test_gh8904_zeroder_at_root_fails.<locals>.fderc                 S   s   d|  d S )NrÒ   r   r   r   r   r   r    Úfder2ž  s    z0test_gh8904_zeroder_at_root_fails.<locals>.fder2)r/   rM   )r/   rM   rN   r}   N)r@   r   r   Z_xtolZ_rtol)r  rI   r  r  r   r   r    Ú!test_gh8904_zeroder_at_root_fails‹  s.    
ÿÿr  c                     sn   d‰ ‡ fdd„} ‡ fdd„}‡ fdd„}d}t | ||d	d
�\}}|jsJJ ‚t | |||d	d�\}}|jsjJ ‚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    r1   À  s    ztest_gh_8881.<locals>.fc                    s   t | dˆ  ˆ  ƒˆ  S r¶   r  r   r  r   r    ÚfpÃ  s    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)rM   r6   ©rM   rN   r6   N)r   rW   )r1   r  r  r/   ÚrtrI   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sJJ ‚t jddgt jd�}t t¡�$ tj| |||d	d
�}W d  ƒ n1 s’0    Y  dd„ }tj| |||d	d
�}|j 	¡ sÆJ ‚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    r1   Ú  s    z,test_gh_9608_preserve_array_shape.<locals>.fc                 S   s   d|  S r"   r   r   r   r   r    r  Ý  s    z-test_gh_9608_preserve_array_shape.<locals>.fpc                 S   s   dS r"   r   r   r   r   r    r  à  s    z.test_gh_9608_preserve_array_shape.<locals>.fppræ   ©rè   Tr  éýÿÿÿNc                 S   s   t jt  | ¡dt jd�S )Nr   r  )rx   r¸   râ   Úfloat32r   r   r   r    Ú	fpp_arrayî  s    z4test_gh_9608_preserve_array_shape.<locals>.fpp_array)
rx   r²   r!  r   rW   rŠ   rª   Ú
IndexErrorr@   rÌ   )	r1   r  r  r/   r  rI   Zx0_arrayre   r"  r   r   r    Ú!test_gh_9608_preserve_array_shapeÕ  s     

ÿ$
ÿr$  z maximum_iterations,flag_expectedr°   r  c                 C   sp   t jdd„ ddddd| ddd	�	}|d
 j|ks2J ‚|t jkrP|d
 j| kslJ ‚n|t jkrl|d
 j| k slJ ‚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¼      rZ   z6test_gh9254_flag_if_maxiter_exceeded.<locals>.<lambda>iâÿÿÿé   r   r›   TFr5   r   N)r@   rð   rø   ÚCONVERRrÖ   Ú	CONVERGED)Zmaximum_iterationsZflag_expectedre   r   r   r    Ú$test_gh9254_flag_if_maxiter_exceeded÷  s    ý

r(  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 sX0    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    r1     s    z/test_gh9551_raise_error_if_disp_true.<locals>.fc                 S   s   d|  S r"   r   r   r   r   r    Úf_p  s    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Ê   r@   r   rŠ   rª   r×   r•   r   )r1   r*  r8   r   r   r    Ú$test_gh9551_raise_error_if_disp_true  s    þ,r+  Úsolver_name)rð   rñ   r�   r†   r�   c                 C   sP   dd„ }t t| ƒ}tjtdd�� ||ddƒ W d   ƒ n1 sB0    Y  d S )Nc                 S   s   t jS r'   )rx   r   r   r   r   r    r1   $  s    ztest_gh3089_8394.<locals>.fzThe function value at x...r¨   r   r   )Úgetattrr@   rŠ   rª   r«   )r,  r1   Úsolverr   r   r    Útest_gh3089_8394  s    
r/  rD   c                    sf   ‡ fdd„‰ dˆ _ tˆ d| d�}|jdu s.J ‚|j d¡s>J ‚|jˆ j ksNJ ‚t|jƒ|jv sbJ ‚d S )Nc                    s   ˆ  j d7  _ tjS r)  )Ú_countrx   r   r   ©r1   r   r    r1   2  s    ztest_gh18171.<locals>.fr   )r   r   )r   rD   FzThe function value at x)r0  r   rW   rø   Ú
startswithrÐ   Ústrr8   )rD   rä   r   r1  r    Útest_gh18171,  s    r4  Úrs_interfaceTFc                    sf   |rdd„ nt t| ƒ}‡ fdd„‰ dˆ _|ˆ dddd�}|rN|jˆ jksbJ ‚n|d	 jˆ jksbJ ‚d S )
Nc                 [   s   t | ||fd�S ©N)r   ©r   ©r1   r2   r3   rG   r   r   r    r¼   D  rZ   z%test_function_calls.<locals>.<lambda>c                    s   ˆ  j d7  _ | d d S )Nr   r   )Úcallsr   r1  r   r    r1   G  s    ztest_function_calls.<locals>.fr   r°   Trˆ   r   )r-  r@   r9  rÐ   )r,  r5  r.  rä   r   r1  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<0    Y  |jrPJ ‚|jd
ks^J ‚t jtdd��& t| ddddd�d }W d	  ƒ n1 s˜0    Y  |jr¬J ‚|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    ÚlhsV  s    z*test_gh_14486_converged_false.<locals>.lhsr  r¨   rK   g333333Ã¿r€   )rD   r/   r0   Nzconvergence errorFT)r/   r0   r7   r6   r   )rŠ   rË   rÊ   r   rW   rø   r   )r;  rä   r   r   r    Útest_gh_14486_converged_falseT  s    .
4
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 sR0    Y  ||ddd	d
�}|rt|n|d }|js†J ‚t|jddd� ||dtdƒd	d
�}|r²|n|d }|jsÄJ ‚t|jddd� d S )Nc                 [   s   t | ||fd�S r6  r7  r8  r   r   r    r¼   j  rZ   ztest_gh5584.<locals>.<lambda>c                 S   s   d|  S )Ng¬÷N’~hr   r   r   r   r    r1   m  s    ztest_gh5584.<locals>.fz...must have different signsr¨   g      à¿gš™™™™™Ù¿Trˆ   gš™™™™™Ù?r   r   rÏ   rœ   z-0.0)	r-  r@   rŠ   rª   r«   rW   r   r8   ry   )r,  r5  r.  r1   rä   r   r   r    Útest_gh5584d  s    ÿ
ÿ.

r=  c                  C   sÈ   dd„ } d}t  t¡j}tj| dd|d| d�}| |ƒ}tj| dd|d| d�}| |ƒ}||k sdJ ‚d	|d
 d›d|d›d�}tjt|d��( tj| dd||d
 d� W d   ƒ n1 sº0    Y  d S )Nc                 S   s   | d d|   d S )Nr~   r   r�   r   r   r   r   r    r1   ‡  s    ztest_gh13407.<locals>.fgYóøÂn¥g»½×Ùß|Û=g    _ Br   r_   r   zrtol too small \(r   Úgz < z\)r¨   )	rx   r	   ry   rz   r@   r�   rŠ   rª   r«   )r1   rP   rz   r0   r!   Zx4Z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 r)  r   )rÅ   r   r   r    r1   œ  s    z&test_newton_complex_gh10103.<locals>.fy      ð?      ð?r   gê-�™—q=rœ   y       @      ø?rK   )r/   r0   rD   )r   r   r   r8   )r1   rä   r   r   r    Útest_newton_complex_gh10103˜  s
    
r@  c                 C   sF   d}t jt|d��  | tdddd� W d   ƒ n1 s80    Y  d S )Nz2'float' object cannot be interpreted as an integerr¨   r·   r€   gÍÌÌÌÌR@)rÕ   )rŠ   rª   rý   r!   )rD   r¬   r   r   r    Útest_maxiter_int_check_gh10236¥  s    rA  )RrŠ   Ú	functoolsr   Znumpy.testingr   r   r   r   r   r   Únumpyrx   r	   r
   r   r   r   r   r   r   Zscipyr   Zscipy.optimizer   r@   r   r   r   Zscipy._lib._utilr   rh   Zscipy.optimize._tstutilsr   r   rŽ   ry   rz   rë   rï   r�   r†   rð   rñ   r�   r�   Zgradient_methodsZall_methodsr!   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/  r4  r:  r<  r=  r?  r@  rA  r   r   r   r    Ú<module>   sˆ    (
ÿ
a1   "0"þ
ÿ
ÿ
ÿÿ