
    xf                        d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Zd dl
mZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  d ej                  e!      jD                  z  Z# ee!      jD                  Z$ejJ                  ejL                  ejN                  ejP                  ejR                  gZ*ej.                  gZ+e*e+z   Z,d	 Z-d
 Z.d Z/d Z0d Z1d Z2d Z3ed        Z4 G d d      Z5 G d de5      Z6 G d de5      Z7d Z8d Z9d Z: G d d      Z;d Z<d Z=d Z>d Z?d  Z@d! ZAe j                  j                  d"d#ej                  fd$ej                  fg      d%        ZFd& ZGe j                  j                  d'g d(      d)        ZHe j                  j                  d*g d(      d+        ZIe j                  j                  d'g d(      e j                  j                  d,d-d.g      d/               ZJd0 ZKe j                  j                  d'g d(      e j                  j                  d,d-d.g      d1               ZLd2 ZMd3 ZNe j                  j                  d*e,      d4        ZOy)5    N)	lru_cache)assert_warnsassert_assert_allcloseassert_equalassert_array_equalsuppress_warnings)finfopowernanisclosesqrtexpsincos)	_zeros_pynewtonroot_scalarOptimizeResult)getfullargspec_no_self)	get_tests	functions   c                     | dz  d| z  z
  dz
  S N       xs    A/usr/lib/python3/dist-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                 B    t        |       t        |       t        |       fS N)r"   r&   r*   r   s    r!   f1_and_p_and_ppr-   -   s    a5$q'47""r#   c                 0    t        |       t        |       z
  S r,   r   r   r   s    r!   f2r0   2       q6CF?r#   c                 0    t        |       t        |       z   S r,   )r   r   r   s    r!   f2_1r3   6   r1   r#   c                 0    t        |       t        |       z   S r,   r/   r   s    r!   f2_2r5   :   r1   r#   c                     | S r,   r   r   s    r!   f_lrucachedr7   ?   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y)TestScalarRootFindersr   Nc                    g }|xs g D ]0  }||vrddddj                  ||      }|j                  ||          2 t        d
i |}|j                  ddd       |xs g D ]
  }||   ||<    |j                  d      }	|j                  d	d
      }
	  ||d	|
i|\  }}|	||fS # t        $ r0 |	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_kwargsrD   	func_argsrrrs                r!   _run_one_testz#TestScalarRootFinders._run_one_testJ   s   $" 	&A{T37;;AqAr!u%		& vT5AB &B 	%A!!uM!	% vvf~FF62&		NKIiI=IEArR< 	N**3B8H8HI2MM	Ns   B$ $6CCc                    t        |      }t        |j                          t        |j                        }t        |j
                        |z
  }|j
                  d| }	g }
|dv r:|dv r&|
j                  d       |dv r|
j                  d       | j                  |d<   n| j                  |d<   | j                  |d	<   |D cg c]"  }t         | j                  ||f|	|
d
|      $ }}|xs g }|D cg c]  }|d   j                  r| }}|D cg c]  }|d   d   |vs| }}|D cg c]
  }|d   d    }}t        t        |      |gdg g       | j                  | j                  d} |j                  di | |d	   }|j                  d|d         }|D cg c]  }|d   j                  s| }}|D cg c]  }|d   j                   }}|D cg c]  }|d   	 }}t!        |||      D cg c]%  \  }}}t#        ||||      s|d   d   |vr|g|z   ' }}}}|D cg c]+  \  }}}} |d   |g|j                  dt%                      - }}}}}t!        ||      D cg c]  \  }}|dk7  s|g|z    }}}t        |t        |      gg dg       yc c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}}}w c c}}}}w c c}}w )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rtol)rR   rS   r   rF   IDr   rb   rc   )rc   atolr=   rE   r   )_getfullargspecr   
kwonlyargslendefaultsrE   rH   rb   rc   listr[   	convergedr   rJ   rG   rD   zipr   tuple)rO   testsrQ   name
known_failrT   sig	nDefaults	nRequiredrR   rS   rP   resultseltnotcvgdnotcvged_IDStolsrc   rf   cvgdapproxcorrectr>   cnotclosearootfulloutfvsfvs                                r!   	run_testszTestScalarRootFinders.run_testsa   s    f%CNN"#%	MI-	),11++&&x0:%#**95 IIF5M!YYF6N!YYF6N CHI<> ***7&3+7/57 8 I I
  %2
")B3Q1A1A3BB")M3SWT]*-L3MM189#B99c,'6B@ 		4995fF|xxtF|,&;#a&*:*:;;)-.##a&++..%)*c3q6**/267D/I 9 9)!Q14d;BZ7 C#I 9 9
 -56 6(5!Wb r#wu7rvvfeg67 6 6.1#x.@L72sB!GRD3JLLhH.Q89I CM9 <.*96LsT    'J%3J*J*J/"J/,J4J94J9>J>K9*K.0K
2K Kc                 L    t        ||      } | j                  |||fd|i| y)zuRun a collection of tests using the specified method.

        The name is used to determine some optional arguments.
smoothnessrq   N)r   r   )rO   
collectionrQ   rp   r   rq   rT   ro   s           r!   run_collectionz$TestScalarRootFinders.run_collection   s,    
 *<ufdLzLVLr#   )NNr,   )__name__
__module____qualname__npr
   floatepsrb   rc   r[   r   r   r   r#   r!   r9   r9   D   sZ     xrxx"""Dxrxx"""D6:&*N.49l CG"&Mr#   r9   c                      e Zd Zej                  j                  de      ej                  j                  de      d               Zej                  j                  de      ej                  j                  de      d               Z	ej                  j                  de      d        Z
ej                  j                  dej                  ej                  ej                  g      d        Zej                  j                  de      d        Zy)	TestBracketMethodsrQ   functionc                     dt        d      }}t        ||j                  ||g|| j                  | j                        }|j
                  sJ t        |j                  d| j                  | j                         y )N      ?   )rQ   bracketr;   rb   rc         ?rf   rc   )r   r   r   rb   rc   rl   r   rD   )rO   rQ   r   r>   r?   rY   s         r!   test_basic_root_scalarz)TestBracketMethods.test_basic_root_scalar   s^     4711a&Q!YYTYY8{{{$))$))Dr#   c                     dt        d      }} ||||| j                  | j                  d      \  }}|j                  sJ t	        |d| j                  | j                         y )Nr   r   T)rb   rc   rB   r   r   )r   rb   rc   rl   r   )rO   rQ   r   r>   r?   rD   rY   s          r!   test_basic_individualz(TestBracketMethods.test_basic_individual   sX     4711adiidii%)+a {{{c				Br#   c                 B    | j                  d||j                  d       y )Napsr   r   )r   r   )rO   rQ   s     r!   test_aps_collectionz&TestBracketMethods.test_aps_collection   s    E66??qIr#   c                 r    |t         j                  k(  rdhni }| j                  d||j                  |       y )Nzfun7.4chandrupatla)rq   )rL   ridderr   r   )rO   rQ   rq   s      r!   test_chandrupatla_collectionz/TestBracketMethods.test_chandrupatla_collection   s8     $*U\\#9hZr
NFFOO'1 	 	3r#   c                 h    d\  }} |t         ||d      \  }}|j                  sJ t        |d       y )N)rF   r   TrB   r   )r7   rl   r   )rO   rQ   r>   r?   rD   rY   s         r!   test_lru_cached_individualz-TestBracketMethods.test_lru_cached_individual   s7     1a=a{{{a r#   N)r   r   r   pytestmarkparametrizebracket_methodststutils_functionsr   r   r   rL   bisectr   toms748r   r   r   r#   r!   r   r      s   [[X7[[Z);<	E = 8	E [[X7[[Z);<	C = 8	C [[X7J 8J [[Xell(-(7 8383
 [[X7! 8!r#   r   c                       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d Zd Zd Zd Zd Zd Zej*                  j-                  dddg      d        Zy)
TestNewtonc                 n    dg}|ddgz  }dD ]&  }| j                  |t        j                  dd|       ( y )N	aps.13.00z	aps.12.05	aps.12.17r   complexr   r   r   rq   r   rL   r   rO   rq   r   s      r!   test_newton_collectionsz"TestNewton.test_newton_collections   sL    !]
{K00
, 	EJ
ELL(+,   E	Er#   c                 b    g d}dD ]&  }| j                  |t        j                  dd|       ( y )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   s?    0
 - 	EJ
ELL(+,   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        y )
Nr   ư>)ra   r   rf      )r<   ra   )r_   ra   )r_   r`   ra   )	r"   r&   r*   r0   r3   r5   rL   r   r   )rO   r=   f_1f_2r    s        r!   test_newtonzTestNewton.test_newton   s    t,r4.>? 	0KAsCQt,AAaD!$/QaT2AAaD!$/Q#48AAaD!$/Q#sEAAaD!$/	0r#   c                 f   t         t        t        ft        t        t
        ffD ]4  \  }}}t        |dd|d      }t         ||j                        dd       6 t         t        t        ft        t        t
        ffD ]3  \  }}}t        |ddd      }t         ||j                        dd       5 y)	z#Invoke newton through root_scalar()r   r   r   )rQ   r;   r_   rb   r   r   rQ   r;   rb   N	r"   r&   r*   r0   r3   r5   r   r   rD   rO   r=   r   r   rY   s        r!   test_newton_by_namezTestNewton.test_newton_by_name   s    t,r4.>? 	5KAsCAh1StLAAaffIqt4	5  t,r4.>? 	5KAsCAh14@AAaffIqt4	5r#   c                    t         t        t        ft        t        t
        ffD ]b  \  }}}t        |dddd      }t         ||j                        dd       t        |dddd      }t         ||j                        dd       d t         t        t        ft        t        t
        ffD ]3  \  }}}t        |ddd	      }t         ||j                        dd       5 y
)z#Invoke secant through root_scalar()r]   r   r   r   rQ   r;   r<   rb   r   r   r   r   Nr   r   s        r!   test_secant_by_namezTestNewton.test_secant_by_name   s    t,r4.>? 	5KAsCAh1FAAaffIqt4Ah1FAAaffIqt4		5
  t,r4.>? 	5KAsCAh14@AAaffIqt4	5r#   c           	          t         t        t        ft        t        t
        ffD ]5  \  }}}t        |dd||d      }t         ||j                        dd       7 y)z#Invoke halley through root_scalar()r^   r   r   )rQ   r;   r_   r`   rb   r   r   Nr   r   s        r!   test_halley_by_namezTestNewton.test_halley_by_name   sV    t,r4.>? 	5KAsCAh1#&$@AAaffIqt4	5r#   c                 ,   d}t        j                  t        |      5  t        t        dt
        dd       d d d        d}t        j                  t        |      5  t        t        dt        dd       d d d        y # 1 sw Y   HxY w# 1 sw Y   y xY w)	Nz$fprime2 must be specified for halleymatchr^   r   r   )rQ   r_   r;   rb   z#fprime must be specified for halley)rQ   r`   r;   rb   )r   raises
ValueErrorr   r"   r&   r*   )rO   messages     r!   test_root_scalar_failz TestNewton.test_root_scalar_fail  s    8]]:W5 	K8DQTJ	K7]]:W5 	L8TadK	L 	L	K 	K	L 	Ls   A>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        ||	       y)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  sW    !q1Q4xAQ4!A$"&&QqT"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aD5266!A$1+A"566:QqTAaD[H1LLr#   c                 z    |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  sK    !qtAaD5266!A$1+A"5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!@)r`   rE   N)r   arrayr   rangerL   r   r   )
rO   r"   r&   r*   a0a1rE   r;   r    
x_expecteds
             r!   test_array_newtonzTestNewton.test_array_newton  s    	I	M	> XX 
  ffU2Y#%,Bub'2URZLLRt,

 	:&LLRtT::&LLRd+:&r#   c                 ^   d }d }t        j                  dd      }t        j                  |||      }t	         ||      d       t        j
                  d      }t        j                  |||      }t	         ||      d       t        j                  ||      }t	         ||      d       y )Nc                     | dz   dz   S )Nr                 ?r   r   s    r!   r=   z/TestNewton.test_array_newton_complex.<locals>.f7  s    q58Or#   c                      yNr   r   r   s    r!   r_   z4TestNewton.test_array_newton_complex.<locals>.fprime:  s    r#   r   r   )r_           )r   fullrL   r   r   ones)rO   r=   r_   tr    s        r!   test_array_newton_complexz$TestNewton.test_array_newton_complex6  s    		 GGArNLLAf-!b! GGAJLLAf-!b!LLA!b!r#   c                 ~    t        j                  d ddgt        j                  ddg      g      }t	        |d       y)	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>K  s    qsQqTz r#   gˡE}@r         )r;   rE   )f~@g      @N)rL   r   r   r   r   rO   r    s     r!   !test_array_secant_active_zero_derz,TestNewton.test_array_secant_active_zero_derI  s7    LL1uaj!xxR1243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       y )Nc                     || dz  z
  S r%   r   yzs     r!   r   z7TestNewton.test_array_newton_integers.<locals>.<lambda>Q      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>U  r   r#   r      r   )rL   r   r   r   s     r!   test_array_newton_integersz%TestNewton.test_array_newton_integersO  sY    LL03%!) $d|o/ABLL01#'"bLA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                  j                         sJ |j                  j                         rJ 	 d d d        y # 1 sw Y   y xY w)	Nc                     | dz  dz
  S r%   r   r   s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>[  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>[  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>^  s    QTAX r#   c                     d| z  S r%   r   r   s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>_  s
    QqS r#   Tr   r   )r   RuntimeWarningrL   r   r   warnsr   rD   zero_derallrl   any)rO   ru   s     r!   #test_array_newton_zero_der_failuresz.TestNewton.test_array_newton_zero_der_failuresX  s    ^U\\'"b?	D \\.) 	/ll#5Bx#0dDGGLL!,##'')))((,,....	/ 	/ 	/s   A,B55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                         y )Nc                     | dz  d| z  z
  dz
  S r   r   r   s    r!   r"   z+TestNewton.test_newton_combined.<locals>.f1e  s    6AE>A%%r#   c                     d| z  dz
  S r%   r   r   s    r!   r&   z-TestNewton.test_newton_combined.<locals>.f1_1g  s    q519r#   c                     dd| z  z   S r(   r   r   s    r!   r*   z-TestNewton.test_newton_combined.<locals>.f1_2i  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_ppl  s'    a4!A#:a<1Q++r#   r   r   )rQ   r;   r_   T:0yE>r   r   r^   )rQ   r;   r_   r`   )rQ   r;   r`   )r   r   rD   r   function_calls)rO   r"   r&   r*   r-   sol0sols          r!   test_newton_combinedzTestNewton.test_newton_combinedd  s    	&			, 2h1TB/(qN		388$7Qs)))4+>+>?2h1T4P/(q$O		388$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 t        |j                  |dz   |j                  z         |j                  dz
  }	t        j                  t
        |f|	d	d|\  }}t        |j                          t        ||j                         t        |j                  |	       |dk(  s[t        j                  t        d|	z        5  t        j                  t
        |f|	dd|\  }}d d d         y # 1 sw Y   xY w)Nr   ))      )r   r   )r   	   r   T)ra   rB   r_   r`   rC   Fr   r   )maxiterrC   z3Failed to converge after %d iterations, value is .*r   )r   r&   r*   rL   r   r"   r   rl   r   rD   
iterationsr  r   r   RuntimeError)
rO   r;   expected_countsderivsrT   rV   vr    rY   iterss
             r!   test_newton_full_outputz"TestNewton.test_newton_full_outputy  s   
 3Ah 	TF!$9F"D)It+<=gvF 1q	 <<B=U=f=DAqAKK AFF#!,,(8(89?6;RS{''1<<!+;;;;Q--
all/JK LL1$E<<BLELVLDAqO$AFF#u-{ ]] OSXY[ T !<<BSDSFSDAqT T1	T0T Ts   "F99G	c                     d }d }t        t        t        j                  |d|d       t	        j
                  t        d      5  t        j                  |d|       d d d        y # 1 sw Y   y xY w)Nc                     | dz  dz
  S )Nr   r)   r   r   s    r!   r@   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rC   zDerivative was zeror   )r   r  rL   r   r   r   r  )rO   r@   r!  s      r!   test_deriv_zero_warningz"TestNewton.test_deriv_zero_warning  sV    	 	^U\\4e%P]]</DE 	+LLsE*	+ 	+ 	+s   A&&A/c                     t        j                  ddg      }|j                         }t        t         j                  |t         j
                         t        ||       y )N皙?r   )r   r   copyr   r   r   r   )rO   r;   x0_copys      r!   test_newton_does_not_modify_x0z)TestNewton.test_newton_does_not_modify_x0  s=    XXsAh'')rvvr266"2w'r#   c                    t        t        ddd      }t        t        dddd      }t        t        dddd	      d
   }t        t        |j                        dd       |j                  j
                  t               k(  sJ t        t        |j                        dd       |j                  j
                  t               k(  sJ t        t        |j                        dd       |j                  j
                  t               k(  sJ |j                  |j                  cxk(  r|j                  k7  sJ  J |j                  |j                  d
z
  cxk(  r3|j                  cxk(  r#|j                  cxk7  r|j                  dz  k(  sJ  J y )Nr   r   r   r   r]   r   r   T)r;   r<   ra   rB   r   r   r   )	r   r"   r   r   rD   shapern   r  r  )rO   res_newton_defaultres_secant_default
res_secants       r!   test_gh17570_defaultsz TestNewton.test_gh17570_defaults  s{   
 )HN(Hq.24 B1$GJ
 	-223QTB!&&,,777-223QTB!&&,,777:??+QT:$$/// #''??1%001 	2 1 	2 1 #--%44q87((7 &007 &44Q6	7 	8 7 	8 7r#   rQ   r]   r   c                     d }t        |d|      }|j                  sJ t        t        |j                        d       |j                  j
                  t        j
                  t        j                        k(  sJ y )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;   rQ   g;f?)r   rl   r   absrD   dtyper   float64)rO   rQ   r=   ress       r!   test_int_x0_gh19280zTestNewton.test_int_x0_gh19280  sX    
	 !&1}}}CHHw/xx~~"**!5555r#   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r(  r.  r   r   r   r6  r   r#   r!   r   r      s    EE	05	55L%'N"&5C
/@*#TJ+(8: [[X(';<6 =6r#   r   c            	          dfd} t         j                  t         j                  g}t        x}}|D ],  } || dd||      }t	        |||d|j
                  z         . y )Nr%  c                     | z
  S r,   r   )r    rD   s    r!   r=   ztest_gh_5555.<locals>.f  s    4xr#   g    חg    cAre   z	method %s)rf   rc   err_msg)rL   r   r   TOLr   r   )r=   methodsrb   rc   rQ   r5  rD   s         @r!   test_gh_5555r<    sh    D ||U\\*GD4 ?Qc48c4 +foo =	??r#   c                      d } d}dt         z  }t        j                  t        j                  g}|D ]  } || dd||      }t	        d|||         y )	Nc                     | dk  ry| dz
  S )Nr   g333333?r   r   s    r!   r=   ztest_gh_5557.<locals>.f  s    s7s7Nr#   gRQ?r   r   r   re   r?  r   )
_FLOAT_EPSrL   brentqbrenthr   )r=   rf   rc   r;  rQ   r5  s         r!   test_gh_5557rC    sX     Dz>D||U\\*G 8Q14d3St$78r#   c                      d} d}| |fD ]Y  \  }}}t        j                  |      t        j                  t        j                  fD ]  } |fd||      }t        ||        [ y )N)g      |g     ug      y)g     u@g      |@g      y@c                 4    t        j                  |       z
  S r,   r   )r    r}   s    r!   r   z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>  s    266!9Q; r#   )r   r   rL   rB  rA  r   )underflow_scenariooverflow_scenarior>   r?   rD   rQ   r5  r}   s          @r!   'test_brent_underflow_in_root_bracketingrH     sn    
 2-)+<= '
1dFF4L||U\\2 	'F.15CD#&	''r#   c                   D    e Zd Z ej                  dddd      Zd Zd Zy)	TestRootResultsr   ,   .   r   )rD   r  r  flagc                 F    d}t        t        | j                        |       y )Nzm      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0)r   reprrY   )rO   expected_reprs     r!   	test_reprzTestRootResults.test_repr  s    0 	T$&&\=1r#   c                 <    t        | j                  t              sJ y r,   )
isinstancerY   r   )rO   s    r!   	test_typezTestRootResults.test_type  s    $&&.111r#   N)r   r   r   rL   rM   rY   rQ  rT  r   r#   r!   rJ  rJ    s$    sr"1MA22r#   rJ  c                     d } d }d }t        dd      }d}t        j                  | ||||d      }t         | |g| d	d
       |gdz  }d}t        j                  | ||||d      }t         | |g| d	d
       y)z&Test Halley's works with complex rootsc                 6    |d   | dz  z  |d   | z  z   |d   z   S )Nr   r   r   r   r   s     r!   r=   ztest_complex_halley.<locals>.f  s*    tad{QqTAX%!,,r#   c                 $    d|d   z  | z  |d   z   S )Nr   r   r   r   r   s     r!   r   z test_complex_halley.<locals>.f_1!  s    1Q4x!|ad""r#   c                 X    d|d   z  }	 t        |       }|g|z  S # t        $ r |cY S w xY w)Nr   r   )ri   	TypeError)r    r>   retvalsizes       r!   r   z test_complex_halley.<locals>.f_2$  sA    QqT	#q6D 8d?"  	M	s    ))r   r)   )r)   g      @r   r   )rE   r_   r`   ra   r   r   r   N)r   rL   r   r   )r=   r   r   r   coeffsr   s         r!   test_complex_halleyr]    s    -## 	SAFQsCTJAAaM&M140	
bAFQsCTJAAaM&M140r#   c                     t        j                  t              j                  dz  } d| z
  d| z   z  }t	               5 }|j                  t        d       t        j                  d |gdz        }ddd       t        d	gdz         d
}t	               5 }|j                  t        d       t        j                  d |d      }ddd       t        |d       t        j                  t        d      5  t        j                  d |d      }ddd       d}t	               5 }|j                  t        d       t        j                  d |d      }ddd       t        |d       t        j                  t        d      5  t        j                  d |d      }ddd       y# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   yxY w)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>E  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>K      AG> r#   F)r;   rC   r   r   c                     | dz
  dz  S rd  r   r   s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>N  re  r#   Tg.ЗK.c                     | dz   dz  S rd  r   r   s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>R  re  r#   rF   c                     | dz   dz  S rd  r   r   s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>U  re  r#   )r   r
   r   r   r	   filterr  rL   r   r   r   r   r  )dxp0supr    s       r!   test_zero_der_nz_dprm  8  s    
%			$B "*r	"B		 A

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

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

>>2LL1buEF Ar	|>	: ELL1btDE E#A AF FE EF FE Es;   3F"0F/2F; 0G?G"F,/F8;GGGc                     d} dd}d}d}||z  | z  |z  }fd}t        j                  t              5  t        j                  |g dd|| gd	
      }|j
                  j                         rJ 	 ddd       t        j                  t              5  t        j                  |dgdz  d|| gd	
      }ddd       y# 1 sw Y   LxY w# 1 sw Y   yxY w)z(Test that array newton fails as expectedr%  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_eqne  s[    BGGN++BHHY_s2!BY)@@A B BB 	Cr#   ){Gz?g?gvÖ?g333333?r   T)r;   r  rE   rB   Nrv  )	r   r  r  rL   r   rl   r  r   r  )diameterrhomuureynolds_numberru  resultrt  s          @r!   test_array_newton_failuresr}  X  s    
 HI
C	BAAg(2-OC 
n	% *7!8,$
 ##''))))* 
|	$ 
tfqj!!8,$

 
* *
 
s   ;B<!C<CCc                  f   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                         y)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 )Nr  r   r   r   s    r!   fder2z0test_gh8904_zeroder_at_root_fails.<locals>.fder2      sQwr#   )r;   r_   )r;   r_   r`   r   N)rL   r   r   _xtol_rtol)r  rY   r  r  s       r!   !test_gh8904_zeroder_at_root_failsr  z  su    	^*AAqu{{=^B/AAqu{{=  	^$7AAqu{{=^$"	$AAqu{{=^Bt<AAqu{{=^Bt"	$AAqu{{= 	^D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 y	)
zzTest that Halley's method realizes that the 2nd order adjustment
    is too big and drops off to the 1st order adjustment.r  c                 B    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                 .    t        | dz
  z        z  S r   r  r  s    r!   fpztest_gh_8881.<locals>.fp  s    QQ	"1$$r#   c                 L    t        | ddz  z
  z        dz  z  dz
  z  z  S rd  r  r  s    r!   fppztest_gh_8881.<locals>.fpp  s3    QQqS!$A.#a%8::r#   r%  T)r_   rB   r_   r`   rB   N)r   rl   )r=   r  r  r;   rtrY   r  s         @r!   test_gh_8881r    sf     	
A1%; 
B 1b6EB;;; 1bSd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	       d
 }t        j                  | |||d      }|j                  j                         sJ y	# 1 sw Y   CxY w)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                      yr%   r   r   s    r!   r  z.test_gh_9608_preserve_array_shape.<locals>.fpp  s    r#   r1  r3  Tr  Nc                 t    t        j                  t        j                  |       dt         j                        S )Nr   r  )r   r   r*  float32r   s    r!   	fpp_arrayz4test_gh_9608_preserve_array_shape.<locals>.fpp_array  s!    wwrxx{ARZZ88r#   )
r   r   r  r   rl   r   r   
IndexErrorrL   r  )	r=   r  r  r;   r  rY   x0_arrayr|  r  s	            r!   !test_gh_9608_preserve_array_shaper    s    
 
2$bjj	)B1bSdCEB;;;xxR

3H	z	" 
xCT


9 \\	8B	tF !!!
 
s   C..C7z maximum_iterations,flag_expectedr   ra  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 y
|t         j
                  k(  r|d	   j                  | k  sJ y
y
)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   TFrA   r   N)rL   rA  rM  CONVERRr  	CONVERGED)maximum_iterationsflag_expectedr|  s      r!   $test_gh9254_flag_if_maxiter_exceededr    s     \\1RT4!3u&F !9>>]***%ay##'9999	%//	)ay##&8888 
*r#   c                  R   d } d }t        t        t        j                  | d|d       t	        j
                  t        d      5  t        j                  | d|       ddd       t        j                  | t        d	d	      |      }t        |t        d
d             y# 1 sw Y   AxY w)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   Fr"  zY^Derivative was zero\. Failed to converge after \d+ iterations, value is [+-]?\d*\.\d+\.$r   Ng      $@r   )	r   r  rL   r   r   r   r  r   r   )r=   r  rD   s      r!   $test_gh9551_raise_error_if_disp_truer    s     q#sG	n
p " 	QS!" <<74.4DD'#s+," "s   BB&solver_name)rA  rB  r   r   r   c                     d }t        t        |       }t        j                  t        d      5   ||dd       d d d        y # 1 sw Y   y xY w)Nc                 "    t         j                  S r,   )r   r   r   s    r!   r=   ztest_gh3089_8394.<locals>.f  s    vvr#   zThe function value at x...r   r   r   )getattrrL   r   r   r   )r  r=   solvers      r!   test_gh3089_8394r    sD    
 UK(F	z)E	F q!Q  s   AArQ   c                    fdd_         t        d|       }|j                  du sJ |j                  j	                  d      sJ |j
                  j                   k(  sJ t        |j                        |j                  v sJ y )Nc                 N    xj                   dz  c_         t        j                  S r  )_countr   r   r    r=   s    r!   r=   ztest_gh18171.<locals>.f   s    	Avvr#   r   )r   r   )r   rQ   FzThe function value at x)r  r   rl   rM  
startswithr  strrD   )rQ   r5  r=   s     @r!   test_gh18171r    s|     AH
a
7C==E!!!888999)))sxx=CHH$$$r#   rs_interfaceTFc                     |rd nt        t        |       }fdd_         |ddd      }|r|j                  j                  k(  sJ y |d   j                  j                  k(  sJ y )Nc                      t        | ||f      S N)r   r   r=   r>   r?   rT   s       r!   r   z%test_function_calls.<locals>.<lambda>2      QA)G r#   c                 >    xj                   dz  c_         | dz  dz
  S )Nr   r   )callsr  s    r!   r=   ztest_function_calls.<locals>.f5  s    	1!taxr#   r   r   Tr   r   )r  rL   r  r  )r  r  r  r5  r=   s       @r!   test_function_callsr  ,  sr      H#*5+#>  AG
Art
,C!!QWW,,,1v$$///r#   c                     d } t        j                  t        d      5  t        | ddd      }ddd       j                  rJ |j
                  d	k(  sJ t        j                  t        d      5  t        | ddd
d      d   }ddd       |j                  rJ |j
                  d	k(  sJ y# 1 sw Y   xY w# 1 sw Y   5xY w)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>.lhsD  s     2661"Q$<$&&r#   rb  r   r]   g333333ÿr   )rQ   r;   r<   Nzconvergence errorFT)r;   r<   rC   rB   r   )r   r  r  r   rl   rM  r   )r  r5  s     r!   test_gh_14486_converged_falser  B  s    ' 
nN	; B#h5SAB}}88****	nN	; MSUsDI!LM}}88****B B
M Ms   B-1B9-B69Cc                    |rd nt        t        |       }d }t        j                  t        d      5   ||ddd       d d d         ||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       y # 1 sw Y   xY w)Nc                      t        | ||f      S r  r  r  s       r!   r   ztest_gh5584.<locals>.<lambda>X  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  rL   r   r   r   rl   r   rD   r   )r  r  r  r=   r5  s        r!   test_gh5584r  R  s      H#*5+#>  
z)G	H 0q$$/0 D#4
0C#3q6C===CHHad+ D%-T
:C#3q6C===CHHad+0 0s   C		C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        y # 1 sw Y   y xY w)Nc                     | dz  d| z  z
  dz
  S )Nr   r   r   r   r   s    r!   r=   ztest_gh13407.<locals>.fu  s    !taczA~r#   gYng|=g    _Br   re   r   zrtol too small \(r   gz < z\)r   )	r   r
   r   r   rL   r   r   r   r   )r=   rb   r   r<   r"   x4f4r   s           r!   test_gh13407r  o  s     D
((5/

C	q%Dqu	=B	
2B	q%Dqu	=B	
2B7N7 #3q5)3s1gR8G	z	1 =a4c!e<= = =s   #C

Cc                      d } t        | d      }t        |dd       t        | ddd      }t        |j                  dd       y )	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<   rQ   )r   r   r   rD   )r=   r5  s     r!   test_newton_complex_gh10103r    s>    
D/CC'
aDVH
=CCHHae,r#   c                     d}t        j                  t        |      5   | t        ddd       d d d        y # 1 sw Y   y xY w)Nz2'float' object cannot be interpreted as an integerr   r   r   gR@)r  )r   r   rY  r"   )rQ   r   s     r!   test_maxiter_int_check_gh10236r    s;     CG	y	0 ,r3U+, , ,s	   8A)Pr   	functoolsr   numpy.testingr   r   r   r   r   r	   numpyr   r
   r   r   r   r   r   r   r   scipy.optimizer   rL   r   r   r   scipy._lib._utilr   rg   scipy.optimize._tstutilsr   r   r   r   r   r:  r@  r   r   rA  rB  r   r   gradient_methodsall_methodsr"   r&   r*   r-   r0   r3   r5   r7   r9   r   r   r<  rC  rH  rJ  r]  rm  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, , G P5\
<<u||U\\=="LL>  00#

  YM YMx-!. -!`G6& G6T?80'
2 
218E@
D,>`4"D &%--3013939$-$ LNN LN%N%  LN$70 8N0&+  LN$7, 8N,4=.
- ;/, 0,r#   