
    ^Mh                     J   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j        e#          j$        z  Z% ee#          j$        Z&ej'        ej(        ej)        ej*        ej+        gZ,ej        gZ-e,e-z   Z.d
 Z/d Z0d Z1d Z2d Z3d Z4d Z5ed             Z6 G d d          Z7 G d de7          Z8 G d de7          Z9d Z:d Z;d Z< G d d          Z=d Z>e j?        j@        d             ZAe j?        j@        d             ZBd  ZCd! ZDd" ZEe j?        F                    d#d$ejG        fd%ejH        fg          d&             ZIe j?        j@        d'             ZJe j?        F                    d(g d)          d*             ZKe j?        F                    d+g d)          d,             ZLe j?        F                    d(g d)          e j?        F                    d-d.d/g          d0                         ZMe j?        j@        d1             ZNe j?        F                    d(g d)          e j?        F                    d-d.d/g          d2                         ZOd3 ZPd4 ZQe j?        F                    d+e.          d5             ZRdS )6    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                     | dz  d| z  z
  dz
  S N       xs    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_zeros.pyf1r#   !   s    6AE>A    c                     d| z  dz
  S Nr   r   r    s    r"   f1_1r'   %   s    q519r$   c                     dd| z  z   S N       @r   r   r    s    r"   f1_2r+   )   s    Q;r$   c                 Z    t          |           t          |           t          |           fS N)r#   r'   r+   r    s    r"   f1_and_p_and_ppr.   -   s!    a55$q''477""r$   c                 @    t          |           t          |           z
  S r-   r   r   r    s    r"   f2r1   2       q66CFF?r$   c                 @    t          |           t          |           z   S r-   )r   r   r    s    r"   f2_1r4   6   r2   r$   c                 @    t          |           t          |           z   S r-   r0   r    s    r"   f2_2r6   :   r2   r$   c                     | S r-   r   r    s    r"   f_lrucachedr8   ?   s    Hr$   c                       e Zd Zd ej        e          j        z  Zd ej        e          j        z  Z	 	 ddZ	ddZ
	 	 ddZdS )TestScalarRootFindersr   Nc           	         g }|pg D ];}||vrdddd                     ||          }|                    ||                    <t          d
i |}|                    ddd           |pg D ]}||         ||<   |                     d          }	|                     d	d
          }
	  ||d	|
i|\  }}|	||fS # t          $ r- |	t          j        t          ddt
          j        |          |fcY S w xY 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_kwargsrE   	func_argsrrrs                r"   _run_one_testz#TestScalarRootFinders._run_one_testJ   sH   $" 	& 	&A{{T377;;AqAAr!u%%%%vT5AABBB &B 	% 	%A!!uM!vvf~~FF62&&		VFKIiI=IIEArR< 	V 	V 	V*3B8H&QQSUUUUU	Vs   %B7 74C.-C.c                 $    t                    }t          |j                    t          |j                  }t          |j                  |z
  }|j        d|         g dv r=dv r.                    d           dv r                    d            j        d<   n j        d<    j        d	<    fd
|D             }	pg d |	D             }
f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             }fdt          |||          D             }d |D             }d t          ||          D             }t          |t          |          gg dg           d |	D             }fd|	D             }t          ||           dS )zRun test-cases using the specified method and the supplied signature.

        Extract the arguments for the method call from the test case
        dictionary using the supplied keys for the method's signature.N)secantr   halley)r   r_   fprime)r_   fprime2tolxtolrtolc           
      N    g | ]!}t           j        |fd           "S ))rS   rT   )listr\   ).0rQ   rU   rR   rP   rS   rT   s     r"   
<listcomp>z3TestScalarRootFinders.run_tests.<locals>.<listcomp>{   sh     I I I<> **7&3+7 7/57 7 8 8 I I Ir$   c                 ,    g | ]}|d          j         |S r   	convergedrg   elts     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s$    BBB3Q1AB3BBBr$   c                 4    g | ]}|d          d         v|S rG   IDr   )rg   rn   
known_fails     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s+    MMM3SWT]*-L-L3-L-L-Lr$   c                 *    g | ]}|d          d         S rp   r   rm   s     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s     999#B999r$   r   rc   rd   c                 ,    g | ]}|d          j         |S rj   rk   rm   s     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s$    ;;;#a&*:;;;;r$   c                 (    g | ]}|d          j         S rj   )rE   rm   s     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    ...##a&+...r$   c                     g | ]
}|d          S r   r   rm   s     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    ***c3q6***r$   c                 j    g | ]/\  }}}t          ||           s|d         d         v)|g|z   0S ))rd   atolrG   rq   )r   )rg   r?   crn   rz   rr   rd   s       r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   sZ     9 9 9)!Q14d;;;9BZ77 C#I777r$   c           
      v    g | ]6\  }}}} |d          |g|                     dt                                R  7S )r>   rF   )rH   tuple)rg   arootr{   fulloutrQ   s        r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   sX     6 6 6(5!Wb r#wu7rvvfegg66777 6 6 6r$   c                 ,    g | ]\  }}|d k    |g|z   S rx   r   )rg   fvrn   s      r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s'    LLL72sB!GGRD3JGGGr$   c                 (    g | ]}|d          j         S rj   )rR   )rg   results     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    EEE6fQi.EEEr$   c                     g | ]}S r   r   )rg   _names     r"   rh   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    111A4111r$   r   )_getfullargspecr   
kwonlyargslendefaultsrF   rI   rc   rd   r   rK   rH   zip)rP   testsrR   r   rr   rU   sig	nDefaults	nRequiredresultsnotcvgdnotcvged_IDStolscvgdapproxcorrectnotclosefvsmethod_from_resultexpected_methodrz   rd   rS   rT   s   ` ````              @@@@r"   	run_testszTestScalarRootFinders.run_testsa   s    f%%CN"###%%	MMI-	),111+++&&x000:%%#**9555 IF5MM!YF6N!YF6NI I I I I I I IBGI I I
  %2
BB'BBBMMMM'MMM99999c,''6B@@@ 	4955fF|xxtF|,,;;w;;;.....**T***9 9 9 9 9 9s67D/I/I 9 9 96 6,46 6 6LLc#x.@.@LLLhH.Q888EEWEEE1111111'99999r$   c                 L    t          ||          } | j        |||fd|i| dS )zuRun a collection of tests using the specified method.

        The name is used to determine some optional arguments.
smoothnessrr   N)r   r   )rP   
collectionrR   r   r   rr   rU   r   s           r"   run_collectionz$TestScalarRootFinders.run_collection   s?    
 *<<<ufdLLzLVLLLLLr$   )NNr-   )__name__
__module____qualname__npr
   floatepsrc   rd   r\   r   r   r   r$   r"   r:   r:   D   s         xrx""Dxrx""D6:&*V V V V.9: 9: 9: 9:v CG"&M M M M M Mr$   r:   c                      e Zd Zej                            de          ej                            de          d                         Zej                            de          ej                            de          d                         Z	ej                            de          ej                            de          d                         Z
ej                            de          d             Zej                            dej        ej        ej        g          d             Zej                            de          d             Zd	S )
TestBracketMethodsrR   functionc                     dt          d          }}t          ||j        ||g|| j        | j                  }|j        sJ t          |j        d| j        | j                   |j        |j        k    sJ d S N      ?   )rR   bracketr<   rc   rd         ?rz   rd   )	r   r   r   rc   rd   rl   r   rE   rR   rP   rR   r   r?   r@   rZ   s         r"   test_basic_root_scalarz)TestBracketMethods.test_basic_root_scalar   s     47711a&Q!YTY8 8 8{$)$)DDDDx6?******r$   c                     dt          d          }} ||||| j        | j        d          \  }}|j        sJ t	          |d| j        | j                   d S )Nr   r   T)rc   rd   rC   r   r   )r   rc   rd   rl   r   )rP   rR   r   r?   r@   rE   rZ   s          r"   test_basic_individualz(TestBracketMethods.test_basic_individual   so     4771&1adidi%)+ + +a {c		BBBBBBr$   c                    dt          d          }}t          ||j        t          j        ||g          || j        | j                  }|j        sJ t          |j	        d| j        | j                   |j
        |j        k    sJ d S r   )r   r   r   r   arrayrc   rd   rl   r   rE   rR   r   s         r"   test_bracket_is_arrayz(TestBracketMethods.test_bracket_is_array   s     4771 "!Q 0 0QTY!Y( ( ( {$)$)DDDDx6?******r$   c                 B    |                      d||j        d           d S )Napsr   r   )r   r   )rP   rR   s     r"   test_aps_collectionz&TestBracketMethods.test_aps_collection   s'    E66?qIIIIIr$   c                 l    |t           j        k    rdhni }|                     d||j        |           d S )Nzfun7.4chandrupatla)rr   )rM   ridderr   r   )rP   rR   rr   s      r"   test_chandrupatla_collectionz/TestBracketMethods.test_chandrupatla_collection   sM     $*U\#9#9hZZr
NFFO'1 	 	3 	3 	3 	3 	3r$   c                 p    d\  }} |t           ||d          \  }}|j        sJ t          |d           d S )N)rG   r   TrC   r   )r8   rl   r   )rP   rR   r?   r@   rE   rZ   s         r"   test_lru_cached_individualz-TestBracketMethods.test_lru_cached_individual   sM     1&a===a{a     r$   N)r   r   r   pytestmarkparametrizebracket_methodststutils_functionsr   r   r   r   rM   bisectr   toms748r   r   r   r$   r"   r   r      s       [X77[Z);<<
+ 
+ =< 87
+ [X77[Z);<<	C 	C =< 87	C [X77[Z);<<+ + =< 87+ [X77J J 87J [Xel(-(7 8 83 38 83
 [X77! ! 87! ! !r$   r   c                   h   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zej        j        d             Zd Zd Zej        j        d             Zd Zd Zej                            d e            ddig          d             Zej                            dddg          d             ZdS )
TestNewtonc                 l    dg}|ddgz  }dD ]&}|                      |t          j        dd|           'd S )N	aps.13.00z	aps.12.05	aps.12.17r   complexr   r   r   rr   r   rM   r   rP   rr   r   s      r"   test_newton_collectionsz"TestNewton.test_newton_collections   sh    !]
{K00
, 	E 	EJ
EL(+,   E E E E	E 	Er$   c                 `    g d}dD ]&}|                      |t          j        dd|           '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   r_   r   r   r   r   s      r"   test_halley_collectionsz"TestNewton.test_halley_collections   se    0 0 0
 - 	E 	EJ
EL(+,   E E E E	E 	Er$   c                    t           t          t          ft          t          t
          ffD ]\  }}}t          j        |dd          }t           ||          dd           t          j        |ddd          }t           ||          dd           t          j        |d|d          }t           ||          dd           t          j        |d||d	          }t           ||          dd           d S )
Nr   ư>)rb   r   rz      )r=   rb   )r`   rb   )r`   ra   rb   )	r#   r'   r+   r1   r4   r6   rM   r   r   )rP   r>   f_1f_2r!   s        r"   test_newtonzTestNewton.test_newton   s   t,r4.>? 	0 	0KAsCQt,,,AAAaDD!$////QaT222AAAaDD!$////Q#4888AAAaDD!$////Q#sEEEAAAaDD!$/////	0 	0r$   c                    t           t          t          ft          t          t
          ffD ]:\  }}}t          |dd|d          }t           ||j                  dd           ;t           t          t          ft          t          t
          ffD ]9\  }}}t          |ddd          }t           ||j                  dd           :dS )	z#Invoke newton through root_scalar()r   r   r   )rR   r<   r`   rc   r   r   rR   r<   rc   N	r#   r'   r+   r1   r4   r6   r   r   rE   rP   r>   r   r   rZ   s        r"   test_newton_by_namezTestNewton.test_newton_by_name  s    t,r4.>? 	5 	5KAsCAh1StLLLAAAafIIqt44444t,r4.>? 	5 	5KAsCAh14@@@AAAafIIqt44444	5 	5r$   c                    t           t          t          ft          t          t
          ffD ]n\  }}}t          |dddd          }t           ||j                  dd           t          |dddd          }t           ||j                  dd           ot           t          t          ft          t          t
          ffD ]9\  }}}t          |ddd	          }t           ||j                  dd           :d
S )z#Invoke secant through root_scalar()r^   r   r   r   rR   r<   r=   rc   r   r   r   r   Nr   r   s        r"   test_secant_by_namezTestNewton.test_secant_by_name
  s   t,r4.>? 	5 	5KAsCAh1FFFAAAafIIqt4444Ah1FFFAAAafIIqt44444t,r4.>? 	5 	5KAsCAh14@@@AAAafIIqt44444	5 	5r$   c           	          t           t          t          ft          t          t
          ffD ];\  }}}t          |dd||d          }t           ||j                  dd           <dS )z#Invoke halley through root_scalar()r_   r   r   )rR   r<   r`   ra   rc   r   r   Nr   r   s        r"   test_halley_by_namezTestNewton.test_halley_by_name  sz    t,r4.>? 	5 	5KAsCAh1#&$@ @ @AAAafIIqt44444	5 	5r$   c                 T   d}t          j        t          |          5  t          t          dt
          dd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          t          dt          dd           d d d            d S # 1 swxY w Y   d S )	Nz$fprime2 must be specified for halleymatchr_   r   r   )rR   r`   r<   rc   z#fprime must be specified for halley)rR   ra   r<   rc   )r   raises
ValueErrorr   r#   r'   r+   )rP   messages     r"   test_root_scalar_failz TestNewton.test_root_scalar_fail  sF   8]:W555 	K 	K8DQTJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K7]:W555 	L 	L8TadKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls#   A		AA1BB!$B!c                    d }d }d }t          j        g d          }t          j        t          d                    dz   dz  }||dd	dd
f}dgdz  }t	          j        ||||          }d}	t          ||	           t	          j        |||||          }t          ||	           t	          j        |||          }t          ||	           dS )ztest newton with arrayc                     |d         | |d         z  z   }|d         |d         t          j        ||d         z            dz
  z  z
  ||d         z  z
  | z
  S )Nr   r   r   r   r   r   r   r   r   r!   r?   r@   s      r"   r#   z(TestNewton.test_array_newton.<locals>.f1'  sX    !q1Q4xAQ4!A$"&QqT"2"2S"899A!HDqHHr$   c                     |d         |d         z  }|d          t          j        |d         |d         z  | |z  z             z  |z  |d         |d         z  z
  dz
  S )Nr   r   r   r   r   r   r   r   s      r"   r'   z*TestNewton.test_array_newton.<locals>.f1_1+  s^    !qtAaD526!A$1+A"5666:QqTAaD[H1LLr$   c                     |d         |d         z  }|d          t          j        |d         |d         z  | |z  z             z  |dz  z  S )Nr   r   r   r   r   r   s      r"   r+   z*TestNewton.test_array_newton.<locals>.f1_2/  sL    !qtAaD526!A$1+A"5666A==r$   )
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!@)ra   rF   N)r   r   r   rangerM   r   r   )
rP   r#   r'   r+   a0a1rF   r<   r!   
x_expecteds
             r"   test_array_newtonzTestNewton.test_array_newton$  s   	I 	I 	I	M 	M 	M	> 	> 	> X 
 
 
   fU2YY#%,Bub'2URZLRt,,

 	:&&&LRtT::::&&&LRd+++:&&&&&r$   c                    d }d }t          j        dd          }t          j        |||          }t	           ||          d           t          j        d          }t          j        |||          }t	           ||          d           t          j        ||          }t	           ||          d           d S )Nc                     | dz   dz   S )Nr                 ?r   r    s    r"   r>   z/TestNewton.test_array_newton_complex.<locals>.fL  s    q58Or$   c                     dS Nr   r   r    s    r"   r`   z4TestNewton.test_array_newton_complex.<locals>.fprimeO  s    3r$   r   r   )r`           )r   fullrM   r   r   ones)rP   r>   r`   tr!   s        r"   test_array_newton_complexz$TestNewton.test_array_newton_complexK  s    	 	 		 	 	 GArNNLAf---!b!!! GAJJLAf---!b!!!LA!b!!!!!r$   c                     t          j        d ddgt          j        ddg          g          }t	          |d           dS )	z8test secant doesn't continue to iterate zero derivativesc                     | | z  |d         z
  S )Nr   r   r!   r?   s     r"   <lambda>z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>`  s    qsQqTz r$   gˡE}@r         r<   rF   )f~@g      @N)rM   r   r   r   r   rP   r!   s     r"   !test_array_secant_active_zero_derz,TestNewton.test_array_secant_active_zero_der^  sO    L11uaj!xR1124 4 4344444r$   c                     t          j        d dgdz  ddgf          }t          |d           t          j        d d	gdz  d
dgf          }t          |d           d S )Nc                     || dz  z
  S r&   r   yzs     r"   r  z7TestNewton.test_array_newton_integers.<locals>.<lambda>f      a!q&j r$         @r   g      .@g      1@r   )gNO@r  c                     || dz  z
  S r&   r   r  s     r"   r  z7TestNewton.test_array_newton_integers.<locals>.<lambda>j  r  r$   r      r	  )rM   r   r   r  s     r"   test_array_newton_integersz%TestNewton.test_array_newton_integersd  s}    L003%!) $d|o/ / /ABBBL001#'"bLLLABBBBBr$   c                    t          t          t          j        d ddgd            t	          j        t                    5  t          j        d ddgd d          }t          |j        d           |j        	                                sJ |j
                                        rJ 	 d d d            d S # 1 swxY w Y   d S )	Nc                     | dz  dz
  S r&   r   r  s    r"   r  z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>q  s    q!tax r$   r   c                     d| z  S r&   r   r  s    r"   r  z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>q  s
    QU r$   c                     | dz  dz
  S r&   r   r  s    r"   r  z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>t  s    QTAX r$   c                     d| z  S r&   r   r  s    r"   r  z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>u  s
    QqS r$   Tr   r   )r   RuntimeWarningrM   r   r   warnsr   rE   zero_derallrl   any)rP   r   s     r"   #test_array_newton_zero_der_failuresz.TestNewton.test_array_newton_zero_der_failuresm  s    	^U\''"b??	D 	D 	D \.)) 	/ 	/l#5#5Bx#0=dD D DGGL!,,,#'')))))(,,......	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s    A(B66B:=B:c                    d }d }d }d }t          |dd|          }t          |ddd          }t          |j        |j        d	
           t          d|j        z  |j                   t          |dd||          }t          |ddd          }t          |j        |j        d	
           t          d|j        z  |j                   d S )Nc                     | dz  d| z  z
  dz
  S r   r   r    s    r"   r#   z+TestNewton.test_newton_combined.<locals>.f1{  s    6AE>A%%r$   c                     d| z  dz
  S r&   r   r    s    r"   r'   z-TestNewton.test_newton_combined.<locals>.f1_1}  s    q519r$   c                     dd| z  z   S r)   r   r    s    r"   r+   z-TestNewton.test_newton_combined.<locals>.f1_2  s    Q;r$   c                 0    | dz  d| z  z
  dz
  d| z  dz
  dfS )Nr   r   r*   r   r    s    r"   r.   z8TestNewton.test_newton_combined.<locals>.f1_and_p_and_pp  s'    a4!A#:a<1Q++r$   r   r   )rR   r<   r`   T:0yE>r   r   r_   )rR   r<   r`   ra   )rR   r<   ra   )r   r   rE   r   function_calls)rP   r#   r'   r+   r.   sol0sols          r"   test_newton_combinedzTestNewton.test_newton_combinedz  s   	& 	& 	&	 	 		 	 		, 	, 	, 2h1TBBB/(qNNN	38$7777Qs))4+>???2h1T4PPP/(q$OOO	38$7777Qs))4+>?????r$   c                 \   d}g d}t          d          D ]}ddd}dt          gdt          ggd |         D ]
\  }}|||<   t          j        t
          |fdd	i|\  }}	t          |	j                   t          ||	j	                   t          |	j
        |	j        f||                    |d
k    r|	j        |	j
        dz   k    sJ n t          |	j        |dz   |	j
        z             |	j
        dz
  }
t          j        t
          |f|
d	d|\  }}	t          |	j                    t          ||	j	                   t          |	j
        |
           |dk    rVd|
z  }t          j        t          |          5  t          j        t
          |f|
dd|\  }}	d d d            n# 1 swxY w Y   d S )Nr   ))      )r   r   )r   	   r   T)rb   rC   r`   ra   rD   Fr   r   )maxiterrD   z3Failed to converge after %d iterations, value is .*r   )r   r'   r+   rM   r   r#   r   rl   r   rE   
iterationsr+  r   r   RuntimeError)rP   capsysr<   expected_countsderivsrU   rW   vr!   rZ   itersmsgs               r"   test_newton_full_outputz"TestNewton.test_newton_full_output  s@   
 333Ahh 	T 	TF!$99F"D)It+<=gvgF  1q		<B==U=f==DAqAK   AF###!,(89?6;RSSS{{'1<!+;;;;;;Q-
al/JKKK L1$E<BLELLVLLDAqO$$$AF###u---{{ LuU]<s;;; T T <BSDSSFSSDAqT T T T T T T T T T T T T T T3	T 	Ts   4FF#	&F#	c                     d }d }t          t          t          j        |d|d           t	          j        t          d          5  t          j        |d|           d d d            d S # 1 swxY w Y   d S )Nc                     | dz  dz
  S )Nr   r*   r   r    s    r"   rA   z0TestNewton.test_deriv_zero_warning.<locals>.func  s    6C<r$   c                     d| z  S r&   r   r    s    r"   dfuncz1TestNewton.test_deriv_zero_warning.<locals>.dfunc  s    q5Lr$   r   FrD   zDerivative was zeror   )r   r  rM   r   r   r   r5  )rP   rA   r@  s      r"   test_deriv_zero_warningz"TestNewton.test_deriv_zero_warning  s    	  	  	 	 	 	^U\4e%PPPP]</DEEE 	+ 	+LsE***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A**A.1A.c                     t          j        ddg          }|                                }t          t           j        |t           j                   t          ||           d S )N皙?r   )r   r   copyr   r   r   r   )rP   r<   x0_copys      r"   test_newton_does_not_modify_x0z)TestNewton.test_newton_does_not_modify_x0  sN    XsAh''))rvr26"""2w'''''r$   c                    d }t          |ddd          }t          |dddd          }t          |dddd	
          d         }t           ||j                  dd           |j        j        t                      k    sJ t           ||j                  dd           |j        j        t                      k    sJ t           ||j                  dd           |j        j        t                      k    sJ |j        |j        cxk    r|j        k    sn J |j        |j        dz
  cxk    r&|j        cxk    r|j        cxk    r|j        dz  k    sn J d S )Nc                 L    t          j        |           sJ t          |           S r-   )r   isscalarr#   r    s    r"   r>   z+TestNewton.test_gh17570_defaults.<locals>.f  s!    ;q>>!!!a55Lr$   r   r   r   r   r^   r   r   T)r<   r=   rb   rC   r   r   r   )r   r   r   rE   shaper}   r4  r+  )rP   r>   res_newton_defaultres_secant_default
res_secants        r"   test_gh17570_defaultsz TestNewton.test_gh17570_defaults  s   	 	 	 )8MMM(8a.24 4 4 A!tFFFqI
 	,122ADAAAA!&,7777,122ADAAAA!&,7777*/**AD9999$//// #'?1 1 1 1%01 1 1 1 1 1 #-%4q87 7 7 7(7 7 7 7 &07 7 7 7 &4Q6	7 7 7 7 7 7 7 7r$   rU   rR   r   c                 r    d }t          j        |fddd|}|j        sJ t          |j        d           d S )Nc                 2    |dk    sJ |dk    sJ | |z  |z
  S )Nr   r   r   r   s      r"   r>   z'TestNewton.test_args_gh19090.<locals>.f  s*    66666666FQJr$   r   )r   r   r  r   )r   r   rl   r   rE   )rP   rU   r>   ress       r"   test_args_gh19090zTestNewton.test_args_gh19090  sX    	  	  	 
 "1BBB6BB}!$$$$$r$   r^   c                     d }t          j        |d|          }|j        sJ t          t	          |j                  d           |j        j        t          j        t          j                  k    sJ d S )Nc                     | dz  dz
  S )Nr   r   r    s    r"   r>   z)TestNewton.test_int_x0_gh19280.<locals>.f  s    b519r$   r   )r<   rR   g;f?)	r   r   rl   r   absrE   dtyper   float64)rP   rR   r>   rR  s       r"   test_int_x0_gh19280zTestNewton.test_int_x0_gh19280  sw    
	 	 	 "16:::}CHw///x~"*!5!5555555r$   N)r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   thread_unsafer$  r.  r<  rB  rG  rO  r   rJ   rS  rZ  r   r$   r"   r   r      s       E E EE E E	0 	0 	05 5 5	5 	5 	55 5 5L L L%' %' %'N" " "&5 5 5C C C [
/ 
/ 
/@ @ @*"T "T "TH [+ + +( ( ( 8  8  8D [X80D'EFF% % GF% [X(';<<6 6 =<6 6 6r$   r   c            	          dfd} t           j        t           j        g}t          x}}|D ].} || dd||          }t	          |||d|j                    /d S )NrD  c                     | z
  S r-   r   )r!   rE   s    r"   r>   ztest_gh_5555.<locals>.f  s    4xr$   g    חg    cArt   zmethod )rz   rd   err_msg)rM   r   r   TOLr   r   )r>   methodsrc   rd   rR   rR  rE   s         @r"   test_gh_5555ra     s    D     |U\*GD4 = =fQc4888c4 ;&/ ; ;	= 	= 	= 	= 	== =r$   c                      d } d}dt           z  }t          j        t          j        g}|D ]%} || dd||          }t	          d|||           &d S )	Nc                     | dk     rdS | dz
  S )Nr   g333333?r   r    s    r"   r>   ztest_gh_5557.<locals>.f  s    s774s7Nr$   gRQ?r   r   r   rt   rd  r   )
_FLOAT_EPSrM   brentqbrenthr   )r>   rz   rd   r`  rR   rR  s         r"   test_gh_5557rh    s|       Dz>D|U\*G 8 8fQ14d333St$777778 8r$   c                      d} d}| |fD ]U\  }}}t          j        |          t          j        t          j        fD ]"} |fd||          }t          ||           #Vd S )N)g      |g     ug      y)g     u@g      |@g      y@c                 2    t          j        |           z
  S r-   r   )r!   r{   s    r"   r  z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>1  s    26!99Q; r$   )r   r   rM   rg  rf  r   )underflow_scenariooverflow_scenarior?   r@   rE   rR   rR  r{   s          @r"   'test_brent_underflow_in_root_bracketingrm  &  s    
 2-)+<= ' '
1dF4LL|U\2 	' 	'F&....155CD#&&&&	'' 'r$   c                   D    e Zd Z ej        ddddd          Zd Zd Zd	S )
TestRootResultsr   ,   .   r   r   )rE   r4  r+  flagrR   c                 N    d}t          t          | j                  |           d S )Nz      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0
         method: newton)r   reprrZ   )rP   expected_reprs     r"   	test_reprzTestRootResults.test_repr9  s*    I 	T$&\\=11111r$   c                 >    t          | j        t                    sJ d S r-   )
isinstancerZ   r   )rP   s    r"   	test_typezTestRootResults.test_type?  s     $&.1111111r$   N)r   r   r   rM   rN   rZ   rv  ry  r   r$   r"   ro  ro  5  sV        sr"1!)	+ 	+ 	+A2 2 22 2 2 2 2r$   ro  c                     d } d }d }t          dd          }d}t          j        | ||||d          }t           | |g|R  d	d
           |gdz  }d}t          j        | ||||d          }t           | |g|R  d	d
           dS )z&Test Halley's works with complex rootsc                 H    |d         | dz  z  |d         | z  z   |d         z   S )Nr   r   r   r   r  s     r"   r>   ztest_complex_halley.<locals>.fE  s*    tad{QqTAX%!,,r$   c                 0    d|d         z  | z  |d         z   S )Nr   r   r   r   r  s     r"   r   z test_complex_halley.<locals>.f_1H  s    1Q4x!|ad""r$   c                 h    d|d         z  }	 t          |           }|g|z  S # t          $ r |cY S w xY w)Nr   r   )r   	TypeError)r!   r?   retvalsizes       r"   r   z test_complex_halley.<locals>.f_2K  sS    QqT	#q66D 8d?"  	 	 	MMM	s   " 11r   r*   )r*   g      @r  r   )rF   r`   ra   rb   r   r   r   N)r   rM   r   r   )r>   r   r   r  coeffsr  s         r"   test_complex_halleyr  C  s    - - -# # ## # # 	SAFQsCTJJJAAAaM&MMM140000	
bAFQsCTJJJAAAaM&MMM14000000r$   c                    t          j        t                    j        dz  }d|z
  d|z   z  }t	                      5 }|                    t          d           t          j        d |gdz            }ddd           n# 1 swxY w Y   t          |d	gdz             d
}t	                      5 }|                    t          d           t          j        d |d          }ddd           n# 1 swxY w Y   t          |d           t          j        t          d          5  t          j        d |d          }ddd           n# 1 swxY w Y   d}t	                      5 }|                    t          d           t          j        d |d          }ddd           n# 1 swxY w Y   t          |d           t          j        t          d          5  t          j        d |d          }ddd           dS # 1 swxY w Y   dS )zBTest secant method with a non-zero dp, but an infinite newton stepgQ?g      i@r*   zRMS ofc                     | dz
  dz  S )Ng      Y@r   r   r  s    r"   r  z%test_zero_der_nz_dp.<locals>.<lambda>m  s    AI> r$   r   r<   Nd   g.ЗK.?Tolerance ofc                     | dz
  dz  S Nr   r   r   r  s    r"   r  z%test_zero_der_nz_dp.<locals>.<lambda>s      AG> r$   F)r<   rD   r   r   c                     | dz
  dz  S r  r   r  s    r"   r  z%test_zero_der_nz_dp.<locals>.<lambda>v  r  r$   Tg.ЗK.c                     | dz   dz  S r  r   r  s    r"   r  z%test_zero_der_nz_dp.<locals>.<lambda>z  r  r$   rG   c                     | dz   dz  S r  r   r  s    r"   r  z%test_zero_der_nz_dp.<locals>.<lambda>}  r  r$   )r   r
   r   r   r	   filterr  rM   r   r   r   r   r5  )r6  dxp0supr!   s        r"   test_zero_der_nz_dpr  _  s    
%		$B "*r	"B			 A

>8,,,L11rdRi@@@A A A A A A A A A A A A A A A Aurz"""	$B			 F

>>222L11buEEEF F F F F F F F F F F F F F F Aq	|>	:	:	: E EL11btDDDE E E E E E E E E E E E E E E	%B			 F

>>222L11buEEEF F F F F F F F F F F F F F F Ar	|>	:	:	: E EL11btDDDE E E E E E E E E E E E E E E E E EsY   7A>>BB-4C--C14C1#EEE#4F##F'*F'G??HHc                     d} dd}d}d}||z  | z  |z  }fd}t          j        t                    5  t          j        |g dd|| gd	
          }|j                                        rJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t          j        |dgdz  d|| gd	
          }ddd           dS # 1 swxY w Y   dS )z(Test that array newton fails as expectedrD  ga2U0*#?g@g\mJA?gCl@c           	          dt          j        |           z  dt          j        dz  |z  d|z  t          j        |           z  z             z  z   S )Nr   r   g@gGz@)r   r   log10)darcy_frictionredia	roughnesss      r"   colebrook_eqnz1test_array_newton_failures.<locals>.colebrook_eqn  sa    BGN+++BHY_s2!BY)@)@@A B B BB 	Cr$   ){Gz?g?gvÖ?g333333?r   T)r<   r3  rF   rC   Nr  )	r   r   r  rM   r   rl   r"  r   r5  )diameterrhomuureynolds_numberr  r   r  s          @r"   test_array_newton_failuresr    s    HI
C	BAAg(2-OC C C C C 
n	%	% * *777!8,$
 
 
 #''))))))* * * * * * * * * * * * * * * 
|	$	$ 
 
tfqj!!8,$
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s#   9A;;A?A? CCCc                     d } t          j        | d          }t          |dt           j        t           j                   t          j        | dgdz            }t          |dt           j        t           j                   d }d }t          j        | d|          }t          |dt           j        t           j                   t          j        | d||	          }t          |dt           j        t           j                   t          j        | dgdz  |          }t          |dt           j        t           j                   t          j        | dgdz  ||	          }t          |dt           j        t           j                   t          j        | d
|          }t          |dt           j        t           j                   t          j        | d
gdz  |          }t          |dt           j        t           j                   dS )z@Test that Newton or Halley don't warn if zero derivative at rootc                     | dz  | dz  z
  S Nr   r   r   r    s    r"   f_zeroder_rootz9test_gh8904_zeroder_at_root_fails.<locals>.f_zeroder_root  s    !tad{r$   r   r  r   r   c                     d| dz  z  d| z  z
  S r  r   r    s    r"   fderz/test_gh8904_zeroder_at_root_fails.<locals>.fder  s    1a4x!a%r$   c                     d| z  dz
  S )Nr0  r   r   r    s    r"   fder2z0test_gh8904_zeroder_at_root_fails.<locals>.fder2      sQwr$   )r<   r`   )r<   r`   ra   r   N)rM   r   r   _xtol_rtol)r  rZ   r  r  s       r"   !test_gh8904_zeroder_at_root_failsr    s      	^***AAqu{====^B///AAqu{====        	^$777AAqu{====^$"	$ 	$ 	$AAqu{====^Bt<<<AAqu{====^Bt"	$ 	$ 	$AAqu{==== 	^D999AAqu{====^b>>>AAqu{======r$   c                      dfd} fd}fd}d}t          | ||d          \  }}|j        sJ t          | |||d          \  }}|j        sJ d	S )
zzTest that Halley's method realizes that the 2nd order adjustment
    is too big and drops off to the 1st order adjustment.r2  c                 R    t          | dz            t          dz            z
  S r   r   r!   ns    r"   r>   ztest_gh_8881.<locals>.f  s&    QAq#a%00r$   c                 6    t          | dz
  z            z  S r   r  r  s    r"   fpztest_gh_8881.<locals>.fp  s     QQ	""1$$r$   c                 T    t          | ddz  z
  z            dz  z  dz
  z  z  S r  r  r  s    r"   fppztest_gh_8881.<locals>.fpp  s6    QQqS!$$A.#a%8::r$   rD  T)r`   rC   r`   ra   rC   N)r   rl   )r>   r  r  r<   rtrZ   r  s         @r"   test_gh_8881r    s     	
A1 1 1 1 1% % % % %; ; ; ; ; 
B 1b666EB; 1bSdCCCEB;r$   c                     d } d }d }t          j        dgt           j                  }t          | |||d          \  }}|j        sJ t          j        ddgt           j                  }t          j        t                    5  t          j        | |||d          }d	d	d	           n# 1 swxY w Y   d
 }t          j        | |||d          }|j        	                                sJ d	S )z_
    Test that shape is preserved for array inputs even if fprime or fprime2 is
    scalar
    c                     | dz  S r&   r   r    s    r"   r>   z,test_gh_9608_preserve_array_shape.<locals>.f  s    !tr$   c                     d| z  S r&   r   r    s    r"   r  z-test_gh_9608_preserve_array_shape.<locals>.fp      1ur$   c                     dS r&   r   r    s    r"   r  z.test_gh_9608_preserve_array_shape.<locals>.fpp  s    qr$   rV  rX  Tr  Nc                 h    t          j        t          j        |           dt           j                  S )Nr   r  )r   r  rK  float32r    s    r"   	fpp_arrayz4test_gh_9608_preserve_array_shape.<locals>.fpp_array  s#    wrx{{ARZ8888r$   )
r   r   r  r   rl   r   r   
IndexErrorrM   r"  )	r>   r  r  r<   r  rZ   x0_arrayr   r  s	            r"   !test_gh_9608_preserve_array_shaper    sh   
       
2$bj	)	)	)B1bSdCCCEB;xR
333H	z	"	" 
 
xCT
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

9 9 9 \	8B	t  F !!!!!!!s   B,,B03B0z maximum_iterations,flag_expectedr   r  c                     t          j        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    r|d	         j        | k     sJ d
S d
S )z]
    Test that if the maximum iterations is exceeded that the flag is not
    converged.
    c                 *    d| z  dz
  | z  dz   | z  dz
  S )Ng333333?gffffff@g333333@g      @r   r    s    r"   r  z6test_gh9254_flag_if_maxiter_exceeded.<locals>.<lambda>  s!    CECK?S(!+c1 r$   i   r   r   TFrB   r   N)rM   rf  rr  CONVERRr4  	CONVERGED)maximum_iterationsflag_expectedr   s      r"   $test_gh9254_flag_if_maxiter_exceededr    s     \11RT4!3u& & &F !9>]****%%ay#'9999999	%/	)	)ay#&88888 
*	)88r$   c                  p   d } d }t          t          t          j        | d|d           t	          j        t          d          5  t          j        | d|           ddd           n# 1 swxY w Y   t          j        | t          d	d	          |          }t          |t          d
d                     dS )zBTest that if disp is true then zero derivative raises RuntimeErrorc                     | | z  dz   S Nr   r   r    s    r"   r>   z/test_gh9551_raise_error_if_disp_true.<locals>.f(  r  r$   c                     d| z  S r&   r   r    s    r"   f_pz1test_gh9551_raise_error_if_disp_true.<locals>.f_p+  s    s
r$   r   FrA  zY^Derivative was zero\. Failed to converge after \d+ iterations, value is [+-]?\d*\.\d+\.$r   Ng      $@r   )	r   r  rM   r   r   r   r5  r   r   )r>   r  rE   s      r"   $test_gh9551_raise_error_if_disp_truer  $  s        q#sGGGG	/
0 
0 
0 " " 	QS!!!	" " " " " " " " " " " " " " "
 <74..44DD'#s++,,,,,s   A))A-0A-solver_name)rf  rg  r   r   r   c                     d }t          t          |           }t          j        t          d          5   ||dd           d d d            d S # 1 swxY w Y   d S )Nc                     t           j        S r-   )r   r   r    s    r"   r>   ztest_gh3089_8394.<locals>.f=  s	    vr$   zThe function value at x...r   r   r   )getattrrM   r   r   r   )r  r>   solvers      r"   test_gh3089_8394r  8  s    
   UK((F	z)E	F	F	F  q!Q                 s   AAArR   c                     fdd_         t          d|           }|j        du sJ |j                            d          sJ |j        j         k    sJ t          |j                  |j        v sJ d S )Nc                 <    xj         dz  c_         t          j        S r  )_countr   r   r!   r>   s    r"   r>   ztest_gh18171.<locals>.fK  s    	Avr$   r   )r   r   )r   rR   FzThe function value at x)r  r   rl   rr  
startswithr+  strrE   )rR   rR  r>   s     @r"   test_gh18171r  E  s         AH
a
7
7
7C=E!!!!8899999))))sx==CH$$$$$$r$   rs_interfaceTFc                     |rd nt          t          |           }fdd_         |ddd          }|r|j        j        k    sJ d S |d         j        j        k    sJ d S )Nc                 (    t          | ||f          S N)r   r   r>   r?   r@   rU   s       r"   r  z%test_function_calls.<locals>.<lambda>]      QA)G)G)G r$   c                 4    xj         dz  c_         | dz  dz
  S )Nr   r   )callsr  s    r"   r>   ztest_function_calls.<locals>.f`  s    	1!taxr$   r   r   Tr   r   )r  rM   r  r+  )r  r  r  rR  r>   s       @r"   test_function_callsr  W  s     ?GGG#*5+#>#>      AG
&Art
,
,
,C 0!QW,,,,,,1v$//////r$   c                     d } t          j        t          d          5  t          | ddd          }ddd           n# 1 swxY w Y   |j        rJ |j        d	k    sJ t          j        t          d          5  t          | ddd
d          d         }ddd           n# 1 swxY w Y   |j        rJ |j        d	k    sJ dS )zDTest that zero slope with secant method results in a converged=Falsec                 >    | t          j        |  | z            z  dz
  S )NgQ?r   r    s    r"   lhsz*test_gh_14486_converged_false.<locals>.lhsp  s     261"Q$<<$&&r$   r  r   r^   g333333ÿr   )rR   r<   r=   Nzconvergence errorFT)r<   r=   rD   rC   r   )r   r   r  r   rl   rr  r   )r  rR  s     r"   test_gh_14486_converged_falser  m  s   ' ' ' 
nN	;	;	; B B#h5SAAAB B B B B B B B B B B B B B B}8*****	nN	;	;	; M MSUsDIII!LM M M M M M M M M M M M M M M}8*******s!   ?AA;B""B&)B&c                    |rd nt          t          |           }d }t          j        t          d          5   ||ddd           d d d            n# 1 swxY w Y    ||dd	d          }|r|n|d
         }|j        sJ t          |j        dd            ||dt          d          d          }|r|n|d
         }|j        sJ t          |j        dd           d S )Nc                 (    t          | ||f          S r  r  r  s       r"   r  ztest_gh5584.<locals>.<lambda>  r  r$   c                     d| z  S )NgN~hr   r    s    r"   r>   ztest_gh5584.<locals>.f  s    axr$   z...must have different signsr   g      gٿTr   g?r   r   r*  r   z-0.0)	r  rM   r   r   r   rl   r   rE   r   )r  r  r  r>   rR  s        r"   test_gh5584r  ~  sj    ?GGG#*5+#>#>    
z)G	H	H	H 0 0q$$////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 &D#4
0
0
0C
)##3q6C=CHad++++ &D%--T
:
:
:C
)##3q6C=CHad++++++s   AAAc            	         d } d}t          j        t                    j        }t	          j        | dd|d|z            } | |          }t	          j        | dd|d|z            } | |          }||k     sJ d|d	z  d
d|d
d}t          j        t          |          5  t	          j        | dd||d	z             d d d            d S # 1 swxY w Y   d S )Nc                     | dz  d| z  z
  dz
  S )Nr   r   r   r   r    s    r"   r>   ztest_gh13407.<locals>.f  s    !taczA~r$   gYng|=g    _Br   rt   r   zrtol too small \(r   gz < z\)r   )	r   r
   r   r   rM   r   r   r   r   )r>   rc   r   r=   r#   x4f4r   s           r"   test_gh13407r    sG      D
(5//
C	q%Dqu	=	=	=B	
2B	q%Dqu	=	=	=B	
2B7777 93q5888s8888G	z	1	1	1 = =a4c!e<<<<= = = = = = = = = = = = = = = = = =s   #CCCc                      d } t          | d          }t          |dd           t          | ddd          }t          |j        dd           d S )	Nc                     | dz
  S r  r   )r  s    r"   r>   z&test_newton_complex_gh10103.<locals>.f  r  r$   y      ?      ?r   g-q=r   y       @      ?r^   )r<   r=   rR   )r   r   r   rE   )r>   rR  s     r"   test_newton_complex_gh10103r    sf      
D//CC''''
aDVH
=
=
=CCHae,,,,,,r$   c                     d}t          j        t          |          5   | t          ddd           d d d            d S # 1 swxY w Y   d S )Nz2'float' object cannot be interpreted as an integerr   r   r   gR@)r3  )r   r   r~  r#   )rR   r   s     r"   test_maxiter_int_check_gh10236r    s     CG	y	0	0	0 , ,r3U++++, , , , , , , , , , , , , , , , , ,s   A  AA)Sr   	functoolsr   numpy.testingr   r   r   r   r   r	   numpyr   r
   r   r   r   r   r   r   r   scipyr   scipy.optimizer   rM   r   r   r   scipy._lib._utilr   r   scipy.optimize._tstutilsr   r   r   r   r   r_  re  r   r   rf  rg  r   r   gradient_methodsall_methodsr#   r'   r+   r.   r1   r4   r6   r8   r:   r   r   ra  rh  rm  ro  r  r   r[  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r$   r"   <module>r     s         . . . . . . . . . . . . . . . .
     A A A A A A A A A A A A A A A A A A A A      , , , , , , , , , , , , G F F F F F P O O O O O O OU5\\
<u|U\="L>  00      # # #
      
   ^M ^M ^M ^M ^M ^M ^M ^MB=! =! =! =! =!. =! =! =!@X6 X6 X6 X6 X6& X6 X6 X6v= = =8 8 80' ' '2 2 2 2 2 2 2 21 1 18 E E E@ 
 
 
D,> ,> ,>`  4" " "D &%-3013 39 93 39$ - - -& LLLN N N N LLLN N% %N N%  LLLN N$770 0 87N N0& + + +  LLLN N$77, , 87N N,4= = =.
- 
- 
- ;//, , 0/, , ,r$   