
    tKgk                        d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Zd dl
mZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlm Z m!Z" d	 ej                  e#      jH                  z  Z% ee#      jH                  Z&ejN                  ejP                  ejR                  ejT                  ejV                  gZ,ej2                  gZ-e,e-z   Z.d
 Z/d Z0d Z1d Z2d Z3d Z4d Z5ed        Z6 G d d      Z7 G d de7      Z8 G d de7      Z9d Z:d Z;d Z< G d d      Z=d Z>d Z?d Z@d  ZAd! ZBd" ZCe j                  j                  d#d$ej                  fd%ej                  fg      d&        ZHd' ZIe j                  j                  d(g d)      d*        ZJe j                  j                  d+g d)      d,        ZKe j                  j                  d(g d)      e j                  j                  d-d.d/g      d0               ZLd1 ZMe j                  j                  d(g d)      e j                  j                  d-d.d/g      d2               ZNd3 ZOd4 ZPe j                  j                  d+e.      d5        ZQy)6    N)	lru_cache)assert_warnsassert_assert_allcloseassert_equalassert_array_equalsuppress_warnings)finfopowernanisclosesqrtexpsincos)optimize)	_zeros_pynewtonroot_scalarOptimizeResult)getfullargspec_no_self)	get_tests	functions   c                     | dz  d| z  z
  dz
  S N       xs    c/home/alanp/www/video.onchill/myenv/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"   f2r1   2       q6CF?r$   c                 0    t        |       t        |       z   S r-   )r   r   r    s    r"   f2_1r4   6   r2   r$   c                 0    t        |       t        |       z   S r-   r0   r    s    r"   f2_2r6   :   r2   r$   c                     | S r-   r   r    s    r"   f_lrucachedr8   ?   s    Hr$   c                       e Zd Zd ej                  e      j                  z  Zd ej                  e      j                  z  Z	 	 ddZ	ddZ
	 	 ddZ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_kwargsrE   	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&		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)rS   rT   r   rG   IDr   rc   rd   )rd   atolr>   rF   r   )_getfullargspecr   
kwonlyargslendefaultsrF   rI   rc   rd   listr\   	convergedr   rK   rH   rE   zipr   tuplerR   )!rP   testsrR   name
known_failrU   sig	nDefaults	nRequiredrS   rT   rQ   resultseltnotcvgdnotcvged_IDStolsrd   rg   cvgdapproxcorrectr?   cnotclosearootfulloutfvsfvresultmethod_from_result_expected_methods!                                    r"   	run_testszTestScalarRootFinders.run_testsa   se    f%CNN"#%	MI-	),11++&&x0:%#**95 IIF5M!YYF6N!YYF6N CHIBGB ***7&3+7/57 8BG 	 I
  %2
")B'3Q1A1A3'B")M'3SWT]*-L3'M189#B9c,'6B@ 		4995fF|xxtF|,&;w#a&*:*:w;)-.##a&++.%)*Tc3q6T*/267D/I 9/I)!Q14d;BZ7 C#I/I 9
 -56,4(5!Wb r#wu7rvvfeg67,4 	 6.1#x.@L.@72sB!GRD3J.@LhH.Q8=DEW6fQi..WE)01A4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.
smoothnessrr   N)r   r   )rP   
collectionrR   rq   r   rr   rU   rp   s           r"   run_collectionz$TestScalarRootFinders.run_collection   s,    
 *<ufdLzLVLr$   )NNr-   )__name__
__module____qualname__npr
   floatepsrc   rd   r\   r   r   r   r$   r"   r:   r:   D   sZ     xrxx"""Dxrxx"""D6:&*V.9:v CG"&Mr$   r:   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)	TestBracketMethodsrR   functionc                 ,   dt        d      }}t        ||j                  ||g|| j                  | j                        }|j
                  sJ t        |j                  d| j                  | j                         |j                  |j                  k(  sJ y )N      ?   )rR   bracketr<   rc   rd         ?rg   rd   )	r   r   r   rc   rd   rm   r   rE   rR   )rP   rR   r   r?   r@   rZ   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)rc   rd   rC   r   r   )r   rc   rd   rm   r   )rP   rR   r   r?   r@   rE   rZ   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   )rP   rR   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)rr   )rM   ridderr   r   )rP   rR   rr   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)rG   r   TrC   r   )r8   rm   r   )rP   rR   r?   r@   rE   rZ   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   rM   bisectr   toms748r   r   r   r$   r"   r   r      s	   [[X7[[Z);<
+ = 8
+ [[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 e       ddig      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   rr   r   rM   r   rP   rr   r   s      r"   test_newton_collectionsz"TestNewton.test_newton_collections   sE    !]
{K00
,J
ELL(+,   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   s8    0
 -J
ELL(+,   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   ư>)rb   r   rg      )r=   rb   )r`   rb   )r`   ra   rb   )	r#   r'   r+   r1   r4   r6   rM   r   r   )rP   r>   f_1f_2r!   s        r"   test_newtonzTestNewton.test_newton   s    t,r4.>?KAsCQt,AAaD!$/QaT2AAaD!$/Q#48AAaD!$/Q#sEAAaD!$/ @r$   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   )rR   r<   r`   rc   r   r   rR   r<   rc   N	r#   r'   r+   r1   r4   r6   r   r   rE   rP   r>   r   r   rZ   s        r"   test_newton_by_namezTestNewton.test_newton_by_name   s    t,r4.>?KAsCAh1StLAAaffIqt4 @  t,r4.>?KAsCAh14@AAaffIqt4 @r$   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   rR   r<   r=   rc   r   r   r   r   Nr   r   s        r"   test_secant_by_namezTestNewton.test_secant_by_name   s    t,r4.>?KAsCAh1FAAaffIqt4Ah1FAAaffIqt4	 @
  t,r4.>?KAsCAh14@AAaffIqt4 @r$   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   )rR   r<   r`   ra   rc   r   r   Nr   r   s        r"   test_halley_by_namezTestNewton.test_halley_by_name  sR    t,r4.>?KAsCAh1#&$@AAaffIqt4 @r$   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   )rR   r`   r<   rc   z#fprime must be specified for halley)rR   ra   r<   rc   )r   raises
ValueErrorr   r#   r'   r+   )rP   messages     r"   test_root_scalar_failz TestNewton.test_root_scalar_fail  sg    8]]:W58DQTJ 67]]:W58TadK 65 65 65s   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!@)ra   rF   N)r   arrayr   rangerM   r   r   )
rP   r#   r'   r+   a0a1rF   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>.f=  s    q58Or$   c                      yNr   r   r    s    r"   r`   z4TestNewton.test_array_newton_complex.<locals>.fprime@  s    r$   r   r   )r`           )r   fullrM   r   r   ones)rP   r>   r`   tr!   s        r"   test_array_newton_complexz$TestNewton.test_array_newton_complex<  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>Q  s    qsQqTzr$   gˡE}@r         r<   rF   )f~@g      @N)rM   r   r   r   r   rP   r!   s     r"   !test_array_secant_active_zero_derz,TestNewton.test_array_secant_active_zero_derO  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>W      a!q&jr$         @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>[  r   r$   r      r   )rM   r   r   r   s     r"   test_array_newton_integersz%TestNewton.test_array_newton_integersU  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>a  s    q!taxr$   r   c                     d| z  S r&   r   r  s    r"   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>a  s    QUr$   c                     | dz  dz
  S r&   r   r  s    r"   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>d  s    QTAXr$   c                     d| z  S r&   r   r  s    r"   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>e  s    QqSr$   Tr   r   )r   RuntimeWarningrM   r   r   warnsr   rE   zero_derallrm   any)rP   rv   s     r"   #test_array_newton_zero_der_failuresz.TestNewton.test_array_newton_zero_der_failures^  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>.f1k  s    6AE>A%%r$   c                     d| z  dz
  S r&   r   r    s    r"   r'   z-TestNewton.test_newton_combined.<locals>.f1_1m  s    q519r$   c                     dd| z  z   S r)   r   r    s    r"   r+   z-TestNewton.test_newton_combined.<locals>.f1_2o  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_ppr  s'    a4!A#:a<1Q++r$   r   r   )rR   r<   r`   T:0yE>r   r   r_   )rR   r<   r`   ra   )rR   r<   ra   )r   r   rE   r   function_calls)rP   r#   r'   r+   r.   sol0sols          r"   test_newton_combinedzTestNewton.test_newton_combinedj  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|
z  }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)rb   rC   r`   ra   rD   Fr   r   )maxiterrD   z3Failed to converge after %d iterations, value is .*r   )r   r'   r+   rM   r   r#   r   rm   r   rE   
iterationsr  r   r   RuntimeError)rP   capsysr<   expected_countsderivsrU   rW   vr!   rZ   itersmsgs               r"   test_newton_full_outputz"TestNewton.test_newton_full_output  s   
 3AhF!$9F"D)It+<=gvF1q	 G <<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-{ LuU]]<s; <<BSDSFSDAq <;3 2 <;s   "F;;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"   rA   z0TestNewton.test_deriv_zero_warning.<locals>.func  s    6C<r$   c                     d| z  S r&   r   r    s    r"   dfuncz1TestNewton.test_deriv_zero_warning.<locals>.dfunc  s    q5Lr$   r   FrD   zDerivative was zeror   )r   r  rM   r   r   r   r  )rP   rA   r)  s      r"   test_deriv_zero_warningz"TestNewton.test_deriv_zero_warning  sN    	 	^U\\4e%P]]</DELLsE* FEEs   A&&A/c                     t        j                  ddg      }|j                         }t        t         j                  |t         j
                         t        ||       y )N皙?r   )r   r   copyr   r   r   r   )rP   r<   x0_copys      r"   test_newton_does_not_modify_x0z)TestNewton.test_newton_does_not_modify_x0  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=   rb   rC   r   r   r   )	r   r#   r   r   rE   shapero   r  r  )rP   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$   rU   rR   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   rm   r   rE   )rP   rU   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    s    r"   r>   z)TestNewton.test_int_x0_gh19280.<locals>.f  s    b519r$   r   )r<   rR   g;f?)	r   r   rm   r   absrE   dtyper   float64)rP   rR   r>   r9  s       r"   test_int_x0_gh19280zTestNewton.test_int_x0_gh19280  s^    
	 ""16:}}}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+  r0  r6  r   r   r   rJ   r:  rA  r   r$   r"   r   r      s    EE	05	55L%'N"&5C
/@*"TH+(8: [[X80D'EF% G% [[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!   rE   s    r"   r>   ztest_gh_5555.<locals>.f  s    4xr$   g    חg    cArf   z	method %s)rg   rd   err_msg)rM   r   r   TOLr   r   )r>   methodsrc   rd   rR   r9  rE   s         @r"   test_gh_5555rG    sc    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   rf   rJ  r   )
_FLOAT_EPSrM   brentqbrenthr   )r>   rg   rd   rF  rR   r9  s         r"   test_gh_5557rN    sS     Dz>D||U\\*GQ14d3St$7 r$   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   rM   rM  rL  r   )underflow_scenariooverflow_scenarior?   r@   rE   rR   r9  r~   s          @r"   'test_brent_underflow_in_root_bracketingrS    sd    
 2-)+<=
1dFF4L||U\\2F.15CD#& 3 >r$   c                   F    e Zd Z ej                  ddddd      Zd Zd Zy	)
TestRootResultsr   ,   .   r   r   )rE   r  r  flagrR   c                 F    d}t        t        | j                        |       y )Nz      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0
         method: newton)r   reprrZ   )rP   expected_reprs     r"   	test_reprzTestRootResults.test_repr#  s    I 	T$&&\=1r$   c                 <    t        | j                  t              sJ y r-   )
isinstancerZ   r   )rP   s    r"   	test_typezTestRootResults.test_type)  s    $&&.111r$   N)r   r   r   rM   rN   rZ   r\  r_  r   r$   r"   rU  rU    s)    sr"1!)	+A22r$   rU  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_12  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   )rj   	TypeError)r!   r?   retvalsizes       r"   r   z test_complex_halley.<locals>.f_25  sA    QqT	#q6D 8d?"  	M	s    ))r   r*   )r*   g      @r   r   )rF   r`   ra   rb   r   r   r   N)r   rM   r   r   )r>   r   r   r   coeffsr   s         r"   test_complex_halleyrh  -  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>V  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<   rD   r   r   c                     | dz
  dz  S ro  r   r  s    r"   r   z%test_zero_der_nz_dp.<locals>.<lambda>_  rp  r$   Tg.ЗK.c                     | dz   dz  S ro  r   r  s    r"   r   z%test_zero_der_nz_dp.<locals>.<lambda>c  rp  r$   rG   c                     | dz   dz  S ro  r   r  s    r"   r   z%test_zero_der_nz_dp.<locals>.<lambda>f  rp  r$   )r   r
   r   r   r	   filterr  rM   r   r   r   r   r  )r  dxp0supr!   s        r"   test_zero_der_nz_dprx  I  sn    
%			$B "*r	"B		

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

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

>>2LL1buE 
 Ar	|>	:LL1btD 
;	:# 
	 
	 
;	: 
	 
;	: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_eqnv  s[    BGGN++BHHY_s2!BY)@@A B BB 	Cr$   ){Gz?g?gvÖ?g333333?r   T)r<   r  rF   rC   Nr  )	r   r	  r  rM   r   rm   r  r   r  )diameterrhomuureynolds_numberr  r   r  s          @r"   test_array_newton_failuresr  i  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   rk  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`   ra   r   N)rM   r   r   _xtol_rtol)r  rZ   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 ro  r  r  s    r"   fppztest_gh_8881.<locals>.fpp  s3    QQqS!$A.#a%8::r$   r-  T)r`   rC   r`   ra   rC   N)r   rm   )r>   r  r  r<   rtrZ   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=  r?  Tr  Nc                 t    t        j                  t        j                  |       dt         j                        S )Nr   r  )r   r   r2  float32r    s    r"   	fpp_arrayz4test_gh_9608_preserve_array_shape.<locals>.fpp_array  s!    wwrxx{ARZZ88r$   )
r   r   r  r   rm   r   r   
IndexErrorrM   r  )	r>   r  r  r<   r  rZ   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   rl  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1r$   i   r   r   TFrB   r   N)rM   rL  rX  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  rM   r   r   r   r  r   r   )r>   r  rE   s      r"   $test_gh9551_raise_error_if_disp_truer    s     q#sG	/
0 	QS!	
0
 <<74.4DD'#s+,
0 
0s   BB&solver_name)rL  rM  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   )getattrrM   r   r   r   )r  r>   solvers      r"   test_gh3089_8394r    s<    
 UK(F	z)E	Fq!Q 
G	F	Fs   AArR   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>.f2  s    	Avvr$   r   )r   r   )r   rR   FzThe function value at x)r  r   rm   rX  
startswithr  strrE   )rR   r9  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@   rU   s       r"   r   z%test_function_calls.<locals>.<lambda>D      QA)Gr$   c                 >    xj                   dz  c_         | dz  dz
  S )Nr   r   )callsr  s    r"   r>   ztest_function_calls.<locals>.fG  s    	1!taxr$   r   r   Tr   r   )r  rM   r  r  )r  r  r  r9  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>.lhsV  s     2661"Q$<$&&r$   rm  r   r^   g333333ÿr   )rR   r<   r=   Nzconvergence errorFT)r<   r=   rD   rC   r   )r   r	  r  r   rm   rX  r   )r  r9  s     r"   test_gh_14486_converged_falser  T  s    ' 
nN	;#h5SA 
<}}88****	nN	;SUsDI!L 
<}}88**** 
<	;
 
<	;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>j  r  r$   c                     d| z  S )NgN~hr   r    s    r"   r>   ztest_gh5584.<locals>.fm  s    axr$   z...must have different signsr   g      gٿTr   g?r   r   r  r   z-0.0)	r  rM   r   r   r   rm   r   rE   r   )r  r  r  r>   r9  s        r"   test_gh5584r  d  s      H#*5+#>  
z)G	Hq$$/ 
I D#4
0C#3q6C===CHHad+ D%-T
:C#3q6C===CHHad+ 
I	Hs   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   rf   r   zrtol too small \(r   gz < z\)r   )	r   r
   r   r   rM   r   r   r   r   )r>   rc   r   r=   r#   x4f4r   s           r"   test_gh13407r    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< 
2	1	1s   #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=   rR   )r   r   r   rE   )r>   r9  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   rd  r#   )rR   r   s     r"   test_maxiter_int_check_gh10236r    s2     CG	y	0r3U+ 
1	0	0s	   8A)Rr   	functoolsr   numpy.testingr   r   r   r   r   r	   numpyr   r
   r   r   r   r   r   r   r   scipyr   scipy.optimizer   rM   r   r   r   scipy._lib._utilr   rh   scipy.optimize._tstutilsr   r   r   r   r   rE  rK  r   r   rL  rM  r   r   gradient_methodsall_methodsr#   r'   r+   r.   r1   r4   r6   r8   r:   r   r   rG  rN  rS  rU  rh  rx  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.!. .!bQ6& Q6h?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$   