
    biC                     x   d dl Z d dlmZ d dlZd dl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"      jF                  z  Z$ ee"      jF                  Z%ejL                  ejN                  ejP                  ejR                  ejT                  gZ+ej0                  gZ,e+e,z   Z-d
 Z.d Z/d Z0d Z1d Z2d Z3d Z4ed        Z5 G d d      Z6 G d de6      Z7 G d de6      Z8d Z9d Z:d Z; G d d      Z<d Z=d Z>d Z?d  Z@d! ZAd" ZBej                  j                  d#d$ej                  fd%ej                  fg      d&        ZGd' ZHej                  j                  d(g d)      d*        ZIej                  j                  d+g d)      d,        ZJej                  j                  d(g d)      ej                  j                  d-d.d/g      d0               ZKd1 ZLej                  j                  d(g d)      ej                  j                  d-d.d/g      d2               ZMd3 ZNd4 ZOej                  j                  d+e-      d5        ZPej                  j                  d+ejL                  ejN                  ejP                  ejR                  g      d6        ZQy)7    N)	lru_cache)assert_assert_allcloseassert_equalassert_array_equal)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    Z/home/cdr/jupyterlab/.venv/lib/python3.12/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                 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    f2r/   3       q6CF?r"   c                 0    t        |       t        |       z   S r+   )r   r   r   s    r    f2_1r2   7   r0   r"   c                 0    t        |       t        |       z   S r+   r.   r   s    r    f2_2r4   ;   r0   r"   c                     | S r+   r   r   s    r    f_lrucachedr6   @   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        $ r1 |	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_kwargsrC   	func_argsrrrs                r    _run_one_testz#TestScalarRootFinders._run_one_testK   s   $" 	&A{T37;;AqAr!u%		& vT5AB &B 	%A!!uM!	% vvf~FF62&		VKIiI=IEArR< 	V**3B8H8H&QSUUU	Vs   B$ $7C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       |D cg c]  }|d   j&                   }}|D cg c]  }| } }t        ||        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 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)rQ   rR   r   rE   IDr   ra   rb   )rb   atolr<   rD   r   )_getfullargspecr   
kwonlyargslendefaultsrD   rG   ra   rb   listrZ   	convergedr   rI   rF   rC   zipr   tuplerP   )!rN   testsrP   name
known_failrS   sig	nDefaults	nRequiredrQ   rR   rO   resultseltnotcvgdnotcvged_IDStolsrb   re   cvgdapproxcorrectr=   cnotclosearootfulloutfvsfvresultmethod_from_result_expected_methods!                                    r    	run_testszTestScalarRootFinders.run_testsb   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8=DE6fQi..EE)01A411'9?I CM9 <.*96LE1s`    'K3K!K!K&"K&,K+K04K0>K5K:9*K?.0L
2L L(L	L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.
smoothnessrp   N)r   r   )rN   
collectionrP   ro   r   rp   rS   rn   s           r    run_collectionz$TestScalarRootFinders.run_collection   s,    
 *<ufdLzLVLr"   )NNr+   )__name__
__module____qualname__npr   floatepsra   rb   rZ   r   r   r   r"   r    r8   r8   E   sZ     xrxx"""Dxrxx"""D6:&*V.9:v CG"&Mr"   r8   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      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d	 Zy
)TestBracketMethodsrP   functionc                 ,   dt        d      }}t        ||j                  ||g|| j                  | j                        }|j
                  sJ t        |j                  d| j                  | j                         |j                  |j                  k(  sJ y N      ?   )rP   bracketr:   ra   rb         ?re   rb   )	r   r   r   ra   rb   rk   r   rC   rP   rN   rP   r   r=   r>   rX   s         r    test_basic_root_scalarz)TestBracketMethods.test_basic_root_scalar   st     4711a&Q!YYTYY8{{{$))$))Dxx6??***r"   c                     dt        d      }} ||||| j                  | j                  d      \  }}|j                  sJ t	        |d| j                  | j                         y )Nr   r   T)ra   rb   rA   r   r   )r   ra   rb   rk   r   )rN   rP   r   r=   r>   rC   rX   s          r    test_basic_individualz(TestBracketMethods.test_basic_individual   sX     4711adiidii%)+a {{{c				Br"   c                 R   dt        d      }}t        ||j                  t        j                  ||g      || j
                  | j                        }|j                  sJ t        |j                  d| j
                  | j                         |j                  |j                  k(  sJ y r   )r   r   r   r   arrayra   rb   rk   r   rC   rP   r   s         r    test_bracket_is_arrayz(TestBracketMethods.test_bracket_is_array   s     471 "!Q 0QTYY!YY( {{{$))$))Dxx6??***r"   c                 B    | j                  d||j                  d       y )Napsr   r   )r   r   )rN   rP   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)rp   )rK   ridderr   r   )rN   rP   rp   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)rE   r   TrA   r   )r6   rk   r   )rN   rP   r=   r>   rC   rX   s         r    test_lru_cached_individualz-TestBracketMethods.test_lru_cached_individual   s7     1a=a{{{a r"   c                     t        j                  t        d      5  t        j                  d ddd       d d d        y # 1 sw Y   y xY w)Nzmaxiter must be >= 0matchc                     | dz  dz
  S r   r   r   s    r    <lambda>z2TestBracketMethods.test_gh_22934.<locals>.<lambda>       1a4!8 r"   r   rE   maxiter)pytestraises
ValueErrorrK   brentqrN   s    r    test_gh_22934z TestBracketMethods.test_gh_22934   s=    ]]:-CD 	@LL+RB?	@ 	@ 	@s   A  A	N)r   r   r   r   markparametrizebracket_methodststutils_functionsr   r   r   r   rK   bisectr   toms748r   r   r   r   r"   r    r   r      sN   [[X7[[Z);<
+ = 8
+ [[X7[[Z);<	C = 8	C [[X7[[Z);<+ = 8+ [[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 e       ddig      d        Zej*                  j-                  dddg      d        Z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   rp   r   rK   r   rN   rp   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   ư>r`   r   re      )r;   r`   )r^   r`   )r^   r_   r`   )	r!   r%   r)   r/   r2   r4   rK   r   r   )rN   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   )rP   r:   r^   ra   r   r   rP   r:   ra   N	r!   r%   r)   r/   r2   r4   r   r   rC   rN   r<   r   r   rX   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   rP   r:   r;   ra   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   )rP   r:   r^   r_   ra   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 halleyr   r]   r   r   )rP   r^   r:   ra   z#fprime must be specified for halley)rP   r_   r:   ra   )r   r   r   r   r!   r%   r)   )rN   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_10  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_24  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      @&.>Mbp?n2d?)
gԩ˰@g9~4b'@gaq(@g0p@gk"z?g4se?gU+F@gwQu%@gd6)@g)i!@)r_   rD   N)r   r   r   rangerK   r   r   )
rN   r!   r%   r)   a0a1rD   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>.fQ  s    q58Or"   c                      yNr   r   r   s    r    r^   z4TestNewton.test_array_newton_complex.<locals>.fprimeT  s    r"   r   r   )r^           )r   fullrK   r   r   ones)rN   r<   r^   tr   s        r    test_array_newton_complexz$TestNewton.test_array_newton_complexP  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    r   z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>e  s    qsQqTz r"   gˡE}@r         r:   rD   )f~@g      @N)rK   r   r   r   r   rN   r   s     r    !test_array_secant_active_zero_derz,TestNewton.test_array_secant_active_zero_derc  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>k      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>o  r  r"   r      r  )rK   r   r   r  s     r    test_array_newton_integersz%TestNewton.test_array_newton_integersi  sY    LL03%!) $d|o/ABLL01#'"bLABr"   c                    t        j                  t              5  t        j                  d ddgd        d d 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   xY w# 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>u  r   r"   r   c                     d| z  S r$   r   r  s    r    r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>u  s
    Q r"   c                     | dz  dz
  S r$   r   r  s    r    r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>x  s    QTAX r"   c                     d| z  S r$   r   r  s    r    r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>y  s
    QqS r"   Tr   r   )r   warnsRuntimeWarningrK   r   r   rC   zero_derallrk   any)rN   rt   s     r    #test_array_newton_zero_der_failuresz.TestNewton.test_array_newton_zero_der_failuresr  s    \\.) 	HLL+b"XG	H \\.) 	/ll#5Bx#0dDGGLL!,##'')))((,,....	/ 	/	H 	H	/ 	/s   CA,CCC"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>.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   )rP   r:   r^   T:0yE>r   r   r]   )rP   r:   r^   r_   )rP   r:   r_   )r   r   rC   r   function_calls)rN   r!   r%   r)   r,   sol0sols          r    test_newton_combinedzTestNewton.test_newton_combined~  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[d|
 d}t        j                  t        |      5  t        j                  t
        |f|
dd|\  }}	d d d         y # 1 sw Y   xY w)Nr   ))      )r   r   )r   	   r   T)r`   rA   r^   r_   rB   Fr   r   )r   rB   zFailed to converge after z iterations, value is .*r   )r   r%   r)   rK   r   r!   r   rk   r   rC   
iterationsr#  r   r   RuntimeError)rN   capsysr:   expected_countsderivsrS   rU   vr   rX   itersmsgs               r    test_newton_full_outputz"TestNewton.test_newton_full_output  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-{ 2%8PQ]]<s; T <<BSDSFSDAqT T3	T2T Ts   "F<<G	c                 ,   d }d }t        j                  t              5  t        j                  |d|d       d d d        t        j
                  t        d      5  t        j                  |d|       d d d        y # 1 sw Y   ExY w# 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rB   zDerivative was zeror   )r   r  r  rK   r   r   r,  )rN   r?   r7  s      r    test_deriv_zero_warningz"TestNewton.test_deriv_zero_warning  sx    	 	\\.) 	7LLsE6	7]]</DE 	+LLsE*	+ 	+	7 	7	+ 	+s   A>B
>B
Bc                     t        j                  ddg      }|j                         }t        t         j                  |t         j
                         t        ||       y )N皙?r   )r   r   copyr   r   r   r   )rN   r:   x0_copys      r    test_newton_does_not_modify_x0z)TestNewton.test_newton_does_not_modify_x0  s=    XXsAh'')rvvr266"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                  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 )Nc                 F    t        j                  |       sJ t        |       S r+   )r   isscalarr!   r   s    r    r<   z+TestNewton.test_gh17570_defaults.<locals>.f  s    ;;q>!>a5Lr"   r   r   r   r   r\   r   r   T)r:   r;   r`   rA   r   r   r   )r   r   r   rC   shaperm   r+  r#  )rN   r<   res_newton_defaultres_secant_default
res_secants        r    test_gh17570_defaultsz TestNewton.test_gh17570_defaults  s   	 )8M(8a.24 A!tFqI
 	,112ADA!&&,,777,112ADA!&&,,777*//*AD9$$/// #''??1%001 	2 1 	2 1 #--%44q87((7 &007 &44Q6	7 	8 7 	8 7r"   rS   rP   r   c                     d }t        j                  |fddd|}|j                  sJ t        |j                  d       y )Nc                 .    |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&    6M66M6FQJr"   r   )r   r   r  r   )r   r   rk   r   rC   )rN   rS   r<   ress       r    test_args_gh19090zTestNewton.test_args_gh19090  s?    	 
 ""1BB6B}}}!$r"   r\   c                    d }t        j                  |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   r   s    r    r<   z)TestNewton.test_int_x0_gh19280.<locals>.f  s    b519r"   r   )r:   rP   g;f?)	r   r   rk   r   absrC   dtyper   float64)rN   rP   r<   rI  s       r    test_int_x0_gh19280zTestNewton.test_int_x0_gh19280  s^    
	 ""16:}}}CHHw/xx~~"**!5555r"   c                    t        j                  t        d      5  t        j                  t
        dd       d d d        t        j                  t        d      5  t        j                  t
        ddd	       d d d        t        j                  t        d
      5  t        j                  t
        dd       d d d        y # 1 sw Y   xY w# 1 sw Y   VxY w# 1 sw Y   y xY w)Nztol too smallr   r   ưr   zmaxiter must be greater than 0r   i)r`   r   zx1 and x0 must be different)r;   )r   r   r   rK   r   r!   r   s    r    test_newton_special_parametersz)TestNewton.test_newton_special_parameters  s     ]]:_= 	+LLQE*	+ ]]:-MN 	7LLQD#6	7 ]]:-JL 	&LLQ1%	& 	&	+ 	+	7 	7	& 	&s#   CCCCCC$N)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r3  r9  r>  rF  r   r   r   rH   rJ  rP  rS  r   r"   r    r   r      s    EE	05	55L%'N"&5C
/@*"TH+( 8D [[X80D'EF% G% [[X(';<6 =6
&r"   r   c            	          dfd} t         j                  t         j                  g}t        x}}|D ],  } || dd||      }t	        |||d|j
                          . y )Nr;  c                     | z
  S r+   r   r   rC   s    r    r<   ztest_gh_5555.<locals>.f      4xr"       ח    cArd   zmethod )re   rb   err_msg)rK   r   r   TOLr   r   )r<   methodsra   rb   rP   rI  rC   s         @r    test_gh_5555r]    sk    D ||U\\*GD4 =Qc48c4")&//): ;	==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   rd   r`  r   )
_FLOAT_EPSrK   r   brenthr   )r<   re   rb   r\  rP   rI  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>A  s    266!9Q; r"   )r   r   rK   rb  r   r   )underflow_scenariooverflow_scenarior=   r>   rC   rP   rI  r|   s          @r    'test_brent_underflow_in_root_bracketingrh  6  sn    
 2-)+<= '
1dFF4L||U\\2 	'F.15CD#&	''r"   c                   F    e Zd Z ej                  ddddd      Zd Zd Zy	)
TestRootResultsr   ,   .   r   r   )rC   r+  r#  flagrP   c                 F    d}t        t        | j                        |       y )Nz      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0
         method: newton)r   reprrX   )rN   expected_reprs     r    	test_reprzTestRootResults.test_reprI  s    I 	T$&&\=1r"   c                 <    t        | j                  t              sJ y r+   )
isinstancerX   r   r   s    r    	test_typezTestRootResults.test_typeO  s    $&&.111r"   N)r   r   r   rK   rL   rX   rq  rt  r   r"   r    rj  rj  E  s)    sr"1!)	+A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>.fU  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_1X  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   )rh   	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   )rD   r^   r_   r`   r   r   r   N)r   rK   r   r   )r<   r   r   r  coeffsr
  s         r    test_complex_halleyr}  S  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	        j
                         5  t	        j                  ddt               t        j                  d |gdz        }d	d	d	       t        d
gdz         d}t	        j
                         5  t	        j                  ddt               t        j                  d |d      }d	d	d	       t        |d       t        j                  t        d      5  t        j                  d |d      }d	d	d	       d}t	        j
                         5  t	        j                  ddt               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   Sx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(   ignorezRMS ofc                     | dz
  dz  S )Ng      Y@r   r   r  s    r    r   z%test_zero_der_nz_dp.<locals>.<lambda>|  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>      AG> r"   F)r:   rB   r   r   c                     | dz
  dz  S r  r   r  s    r    r   z%test_zero_der_nz_dp.<locals>.<lambda>  r  r"   Tg.ЗK.c                     | dz   dz  S r  r   r  s    r    r   z%test_zero_der_nz_dp.<locals>.<lambda>  r  r"   rE   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   warningscatch_warningsfilterwarningsr  rK   r   r   r   r   r,  )r-  dxp0r   s       r    test_zero_der_nz_dpr  o  s    
%			$B "*r	"B		 	 	" A(NCLL1rdRi@A Aurz"	$B		 	 	" F..ILL1buEF Aq	|>	: ELL1btDE	%B		 	 	" F..ILL1buEF Ar	|>	: ELL1btDE E#A AF FE EF FE Es<   8G,5GG(5G4,H GG%(G14G= H	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_eqn  s[    BGGN++BHHY_s2!BY)@@A B BB 	Cr"   ){Gz?g?gvÖ?g333333?r   T)r:   r   rD   rA   Nr  )	r   r  r  rK   r   rk   r  r   r,  )diameterrhomuureynolds_numberr  r   r  s          @r    test_array_newton_failuresr    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)rK   r   r   _xtol_rtol)r  rX   r  r  s       r    !test_gh8904_zeroder_at_root_failsr    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 r  r  r  s    r    fppztest_gh_8881.<locals>.fpp  s3    QQqS!$A.#a%8::r"   r;  T)r^   rA   r^   r_   rA   N)r   rk   )r<   r  r  r:   rtrX   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"   r   rN  Tr  Nc                 t    t        j                  t        j                  |       dt         j                        S )Nr   r  )r   r   rB  float32r   s    r    	fpp_arrayz4test_gh_9608_preserve_array_shape.<locals>.fpp_array  s!    wwrxx{ARZZ88r"   )
r   r   r  r   rk   r   r   
IndexErrorrK   r  )	r<   r  r  r:   r  rX   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   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 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   TFr@   r   N)rK   r   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                     d } d }t        j                  t              5  t        j                  | d|d       d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   |xY w# 1 sw Y   Mx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>.f5  r  r"   c                     d| z  S r$   r   r   s    r    f_pz1test_gh9551_raise_error_if_disp_true.<locals>.f_p8  s    s
r"   r   Fr8  NzY^Derivative was zero\. Failed to converge after \d+ iterations, value is [+-]?\d*\.\d+\.$r   g      $@r   )	r   r  r  rK   r   r   r,  r   r   )r<   r  rC   s      r    $test_gh9551_raise_error_if_disp_truer  2  s     
n	% .QSu-.	/
0 " 	QS!	"
 <<74.4DD'#s+,. ." "s   B5C5B>C
solver_name)r   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>.fK  s    vvr"   zThe function value at x...r   r   r   )getattrrK   r   r   r   )r  r<   solvers      r    test_gh3089_8394r  F  sD    
 UK(F	z)E	F q!Q  s   AArP   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>.fY  s    	Avvr"   r   )r   r   )r   rP   FzThe function value at x)r  r   rk   rm  
startswithr#  strrC   )rP   rI  r<   s     @r    test_gh18171r  S  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>   rS   s       r    r   z%test_function_calls.<locals>.<lambda>k      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>.fn  s    	1!taxr"   r   r   Tr   r   )r  rK   r  r#  )r  r  r  rI  r<   s       @r    test_function_callsr  e  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>.lhs}  s     2661"Q$<$&&r"   r  r   r\   g333333ÿr   )rP   r:   r;   Nzconvergence errorFT)r:   r;   rB   rA   r   )r   r  r  r   rk   rm  r   )r  rI  s     r    test_gh_14486_converged_falser  {  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>  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  rK   r   r   r   rk   r   rC   r   )r  r  r  r<   rI  s        r    test_gh5584r    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>.f  s    !taczA~r"   gYng|=g    _Br   rd   r   zrtol too small \(r   gz < z\)r   )	r   r   r   r   rK   r   r   r   r   )r<   ra   r   r;   r!   x4f4r   s           r    test_gh13407r    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;   rP   )r   r   r   rC   )r<   rI  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!   )rP   r   s     r    test_maxiter_int_check_gh10236r    s;     CG	y	0 ,r3U+, , ,s	   8Ac           	      j   dd}dt        j                  t              j                  z  dz  }fd}t	        j
                  t        d      5   | |dd	|d
t               d d d        t	        j
                  t        d      5   | |dd	|d|       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nr;  )r   r   r   r   r   r   c                     | z
  S r+   r   rV  s    r    r<   z(test_bisect_special_parameter.<locals>.f  rW  r"   zxtol too smallr   rX  rY  rR  )rD   ra   rb   zrtol too smallr   )r   r   r   r   r   r   r   r[  )rP   rD   rtolbadr<   rC   s       @r    test_bisect_special_parameterr    s    
 D&D"((5/%%%)G 
z)9	: =asE<=	z)9	: @asDw?@ @= =@ @s   BB)B&)B2)Rr  	functoolsr   r   numpy.testingr   r   r   r   numpyr   r   r	   r
   r   r   r   r   r   scipyr   scipy.optimizer   rK   r   r   r   scipy._lib._utilr   rf   scipy.optimize._tstutilsr   r   r   r   r   r[  ra  r   r   r   rb  r   r   gradient_methodsall_methodsr!   r%   r)   r,   r/   r2   r4   r6   r8   r   r   r]  rc  rh  rj  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 , , G P5\
<<u||U\\=="LL>  00#

  ^M ^MBA@. A@Hc&& c&L	=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, ELL%,,$)LL%,,$@ A@A@r"   