
    ge                        d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Zd dl
mZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  d ej        e!          j"        z  Z# ee!          j"        Z$ej%        ej&        ej'        ej(        ej)        gZ*ej        gZ+e*e+z   Z,d	 Z-d
 Z.d Z/d Z0d Z1d Z2d Z3ed             Z4 G d d          Z5 G d de5          Z6 G d de5          Z7d Z8d Z9d Z: G d d          Z;d Z<d Z=d Z>d Z?d  Z@d! ZAe jB        C                    d"d#ejD        fd$ejE        fg          d%             ZFd& ZGe jB        C                    d'g d(          d)             ZHe jB        C                    d*g d(          d+             ZIe jB        C                    d'g d(          e jB        C                    d,d-d.g          d/                         ZJd0 ZKe jB        C                    d'g d(          e jB        C                    d,d-d.g          d1                         ZLd2 ZMd3 ZNe jB        C                    d*e,          d4             ZOdS )5    N)	lru_cache)assert_warnsassert_assert_allcloseassert_equalassert_array_equalsuppress_warnings)finfopowernanisclosesqrtexpsincos)	_zeros_pynewtonroot_scalarOptimizeResult)getfullargspec_no_self)	get_tests	functions   c                     | dz  d| z  z
  dz
  S N       xs    ?lib/python3.11/site-packages/scipy/optimize/tests/test_zeros.pyf1r"   !   s    6AE>A    c                     d| z  dz
  S Nr   r   r   s    r!   f1_1r&   %   s    q519r#   c                     dd| z  z   S N       @r   r   r   s    r!   f1_2r*   )   s    Q;r#   c                 Z    t          |           t          |           t          |           fS N)r"   r&   r*   r   s    r!   f1_and_p_and_ppr-   -   s!    a55$q''477""r#   c                 @    t          |           t          |           z
  S r,   r   r   r   s    r!   f2r0   2       q66CFF?r#   c                 @    t          |           t          |           z   S r,   )r   r   r   s    r!   f2_1r3   6   r1   r#   c                 @    t          |           t          |           z   S r,   r/   r   s    r!   f2_2r5   :   r1   r#   c                     | S r,   r   r   s    r!   f_lrucachedr7   ?   s    Hr#   c                       e Zd Zd ej        e          j        z  Zd ej        e          j        z  Z	 	 ddZ	ddZ
	 	 ddZdS )TestScalarRootFindersr   Nc                    g }|pg D ];}||vrdddd                     ||          }|                    ||                    <t          d
i |}|                    ddd           |pg D ]}||         ||<   |                     d          }	|                     d	d
          }
	  ||d	|
i|\  }}|	||fS # t          $ r, |	t          j        t          ddt
          j                  |fcY S w xY w)Nx0x1f)abfuncTFfull_outputdisprootargsr   )	getappenddictupdate	ExceptionzerosRootResultsr   
_EVALUEERR)selftcmethodsig_args_keyssig_kwargs_keyskwargsmethod_argskmethod_kwargsrD   	func_argsrrrs                r!   _run_one_testz#TestScalarRootFinders._run_one_testJ   sE   $" 	& 	&A{{T377;;AqAAr!u%%%%vT5AABBB &B 	% 	%A!!uM!vvf~~FF62&&		NFKIiI=IIEArR< 	N 	N 	N*3B8HII2MMMM	Ns   %B7 73C-,C-c                     t                    }t          |j                    t          |j                  }t          |j                  |z
  }|j        d|         g |dv r=|dv r.                    d           |dv r                    d            j        d<   n j        d<    j        d	<    fd
|D             }	pg d |	D             }
fd|
D             }
d |
D             }t          t          |          |gdg g            j         j        d} |j
        di  |d	         |                    d|d                   d |	D             }d |D             }d |D             }fdt          |||          D             }d |D             }d t          ||          D             }t          |t          |          gg dg           dS )zRun test-cases using the specified method and the supplied signature.

        Extract the arguments for the method call from the test case
        dictionary using the supplied keys for the method's signature.N)secantr   halley)r   r^   fprime)r^   fprime2tolxtolrtolc           
      N    g | ]!}t           j        |fd           "S ))rR   rS   )listr[   ).0rP   rT   rQ   rO   rR   rS   s     r!   
<listcomp>z3TestScalarRootFinders.run_tests.<locals>.<listcomp>y   sh     I I I<> **7&3+7 7/57 7 8 8 I I Ir#   c                 ,    g | ]}|d          j         |S r   	convergedrf   elts     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s$    BBB3Q1AB3BBBr#   c                 4    g | ]}|d          d         v|S rF   IDr   )rf   rm   
known_fails     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s+    MMM3SWT]*-L-L3-L-L-Lr#   c                 *    g | ]}|d          d         S ro   r   rl   s     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s     999#B999r#   r   rb   rc   c                 ,    g | ]}|d          j         |S ri   rj   rl   s     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s$    ;;;#a&*:;;;;r#   c                 (    g | ]}|d          j         S ri   )rD   rl   s     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    ...##a&+...r#   c                     g | ]
}|d          S r   r   rl   s     r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s    ***c3q6***r#   c                 j    g | ]/\  }}}t          ||           s|d         d         v)|g|z   0S ))rc   atolrF   rp   )r   )rf   r>   crm   ry   rq   rc   s       r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   sZ     9 9 9)!Q14d;;;9BZ77 C#I777r#   c           
      v    g | ]6\  }}}} |d          |g|                     dt                                R  7S )r=   rE   )rG   tuple)rf   arootrz   fulloutrP   s        r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   sX     6 6 6(5!Wb r#wu7rvvfegg66777 6 6 6r#   c                 ,    g | ]\  }}|d k    |g|z   S rw   r   )rf   fvrm   s      r!   rg   z3TestScalarRootFinders.run_tests.<locals>.<listcomp>   s'    LLL72sB!GGRD3JGGGr#   r   )_getfullargspecr   
kwonlyargslendefaultsrE   rH   rb   rc   r   rJ   rG   zip)rO   testsrQ   namerq   rT   sig	nDefaults	nRequiredresultsnotcvgdnotcvged_IDStolscvgdapproxcorrectnotclosefvsry   rc   rR   rS   s   ` ` ``            @@@@r!   	run_testszTestScalarRootFinders.run_testsa   s    f%%CN"###%%	MMI-	),111+++&&x000:%%#**9555 IF5MM!YF6N!YF6NI I I I I I I IBGI I I
  %2
BB'BBBMMMM'MMM99999c,''6B@@@ 	4955fF|xxtF|,,;;w;;;.....**T***9 9 9 9 9 9s67D/I/I 9 9 96 6,46 6 6LLc#x.@.@LLLhH.Q88888r#   c                 L    t          ||          } | j        |||fd|i| dS )zuRun a collection of tests using the specified method.

        The name is used to determine some optional arguments.
smoothnessrq   N)r   r   )rO   
collectionrQ   r   r   rq   rT   r   s           r!   run_collectionz$TestScalarRootFinders.run_collection   s?    
 *<<<ufdLLzLVLLLLLr#   )NNr,   )__name__
__module____qualname__npr
   floatepsrb   rc   r[   r   r   r   r#   r!   r9   r9   D   s         xrx""Dxrx""D6:&*N N N N.49 49 49 49l CG"&M M M M M Mr#   r9   c                      e Zd Zej                            de          ej                            de          d                         Zej                            de          ej                            de          d                         Z	ej                            de          d             Z
ej                            dej        ej        ej        g          d             Zej                            de          d             ZdS )	TestBracketMethodsrQ   functionc                     dt          d          }}t          ||j        ||g|| j        | j                  }|j        sJ t          |j        d| j        | j                   d S )N      ?   )rQ   bracketr;   rb   rc         ?ry   rc   )r   r   r   rb   rc   rk   r   rD   )rO   rQ   r   r>   r?   rY   s         r!   test_basic_root_scalarz)TestBracketMethods.test_basic_root_scalar   so     47711a&Q!YTY8 8 8{$)$)DDDDDDr#   c                     dt          d          }} ||||| j        | j        d          \  }}|j        sJ t	          |d| j        | j                   d S )Nr   r   T)rb   rc   rB   r   r   )r   rb   rc   rk   r   )rO   rQ   r   r>   r?   rD   rY   s          r!   test_basic_individualz(TestBracketMethods.test_basic_individual   so     4771&1adidi%)+ + +a {c		BBBBBBr#   c                 B    |                      d||j        d           d S )Napsr   r   )r   r   )rO   rQ   s     r!   test_aps_collectionz&TestBracketMethods.test_aps_collection   s'    E66?qIIIIIr#   c                 l    |t           j        k    rdhni }|                     d||j        |           d S )Nzfun7.4chandrupatla)rq   )rL   ridderr   r   )rO   rQ   rq   s      r!   test_chandrupatla_collectionz/TestBracketMethods.test_chandrupatla_collection   sM     $*U\#9#9hZZr
NFFO'1 	 	3 	3 	3 	3 	3r#   c                 p    d\  }} |t           ||d          \  }}|j        sJ t          |d           d S )N)rF   r   TrB   r   )r7   rk   r   )rO   rQ   r>   r?   rD   rY   s         r!   test_lru_cached_individualz-TestBracketMethods.test_lru_cached_individual   sM     1&a===a{a     r#   N)r   r   r   pytestmarkparametrizebracket_methodststutils_functionsr   r   r   rL   bisectr   toms748r   r   r   r#   r!   r   r      sS       [X77[Z);<<	E 	E =< 87	E [X77[Z);<<	C 	C =< 87	C [X77J J 87J [Xel(-(7 8 83 38 83
 [X77! ! 87! ! !r#   r   c                       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                            dddg          d             ZdS )
TestNewtonc                 l    dg}|ddgz  }dD ]&}|                      |t          j        dd|           'd S )N	aps.13.00z	aps.12.05	aps.12.17r   complexr   r   r   rq   r   rL   r   rO   rq   r   s      r!   test_newton_collectionsz"TestNewton.test_newton_collections   sh    !]
{K00
, 	E 	EJ
EL(+,   E E E E	E 	Er#   c                 `    g d}dD ]&}|                      |t          j        dd|           'd S )N)z	aps.12.06z	aps.12.07z	aps.12.08z	aps.12.09z	aps.12.10z	aps.12.11z	aps.12.12z	aps.12.13z	aps.12.14z	aps.12.15z	aps.12.16r   z	aps.12.18r   r   r^   r   r   r   r   s      r!   test_halley_collectionsz"TestNewton.test_halley_collections   se    0 0 0
 - 	E 	EJ
EL(+,   E E E E	E 	Er#   c                    t           t          t          ft          t          t
          ffD ]\  }}}t          j        |dd          }t           ||          dd           t          j        |ddd          }t           ||          dd           t          j        |d|d          }t           ||          dd           t          j        |d||d	          }t           ||          dd           d S )
Nr   ư>)ra   r   ry      )r<   ra   )r_   ra   )r_   r`   ra   )	r"   r&   r*   r0   r3   r5   rL   r   r   )rO   r=   f_1f_2r    s        r!   test_newtonzTestNewton.test_newton   s   t,r4.>? 	0 	0KAsCQt,,,AAAaDD!$////QaT222AAAaDD!$////Q#4888AAAaDD!$////Q#sEEEAAAaDD!$/////	0 	0r#   c                    t           t          t          ft          t          t
          ffD ]:\  }}}t          |dd|d          }t           ||j                  dd           ;t           t          t          ft          t          t
          ffD ]9\  }}}t          |ddd          }t           ||j                  dd           :dS )	z#Invoke newton through root_scalar()r   r   r   )rQ   r;   r_   rb   r   r   rQ   r;   rb   N	r"   r&   r*   r0   r3   r5   r   r   rD   rO   r=   r   r   rY   s        r!   test_newton_by_namezTestNewton.test_newton_by_name   s    t,r4.>? 	5 	5KAsCAh1StLLLAAAafIIqt44444t,r4.>? 	5 	5KAsCAh14@@@AAAafIIqt44444	5 	5r#   c                    t           t          t          ft          t          t
          ffD ]n\  }}}t          |dddd          }t           ||j                  dd           t          |dddd          }t           ||j                  dd           ot           t          t          ft          t          t
          ffD ]9\  }}}t          |ddd	          }t           ||j                  dd           :d
S )z#Invoke secant through root_scalar()r]   r   r   r   rQ   r;   r<   rb   r   r   r   r   Nr   r   s        r!   test_secant_by_namezTestNewton.test_secant_by_name   s   t,r4.>? 	5 	5KAsCAh1FFFAAAafIIqt4444Ah1FFFAAAafIIqt44444t,r4.>? 	5 	5KAsCAh14@@@AAAafIIqt44444	5 	5r#   c           	          t           t          t          ft          t          t
          ffD ];\  }}}t          |dd||d          }t           ||j                  dd           <dS )z#Invoke halley through root_scalar()r^   r   r   )rQ   r;   r_   r`   rb   r   r   Nr   r   s        r!   test_halley_by_namezTestNewton.test_halley_by_name   sz    t,r4.>? 	5 	5KAsCAh1#&$@ @ @AAAafIIqt44444	5 	5r#   c                 T   d}t          j        t          |          5  t          t          dt
          dd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          t          dt          dd           d d d            d S # 1 swxY w Y   d S )	Nz$fprime2 must be specified for halleymatchr^   r   r   )rQ   r_   r;   rb   z#fprime must be specified for halley)rQ   r`   r;   rb   )r   raises
ValueErrorr   r"   r&   r*   )rO   messages     r!   test_root_scalar_failz TestNewton.test_root_scalar_fail  sF   8]:W555 	K 	K8DQTJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K7]:W555 	L 	L8TadKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls#   A		AA1BB!$B!c                    d }d }d }t          j        g d          }t          j        t          d                    dz   dz  }||dd	dd
f}dgdz  }t	          j        ||||          }d}	t          ||	           t	          j        |||||          }t          ||	           t	          j        |||          }t          ||	           dS )ztest newton with arrayc                     |d         | |d         z  z   }|d         |d         t          j        ||d         z            dz
  z  z
  ||d         z  z
  | z
  S )Nr   r   r   r   r   r   r   r   r   r    r>   r?   s      r!   r"   z(TestNewton.test_array_newton.<locals>.f1  sX    !q1Q4xAQ4!A$"&QqT"2"2S"899A!HDqHHr#   c                     |d         |d         z  }|d          t          j        |d         |d         z  | |z  z             z  |z  |d         |d         z  z
  dz
  S )Nr   r   r   r   r   r   r   r   s      r!   r&   z*TestNewton.test_array_newton.<locals>.f1_1  s^    !qtAaD526!A$1+A"5666:QqTAaD[H1LLr#   c                     |d         |d         z  }|d          t          j        |d         |d         z  | |z  z             z  |dz  z  S )Nr   r   r   r   r   r   s      r!   r*   z*TestNewton.test_array_newton.<locals>.f1_2  sL    !qtAaD526!A$1+A"5666A==r#   )
g4O@gNk@g]0J@g]Qݚt@g~EO5@g$J ?g~5,@gXCڭ@gͮ9@@gӍ@
   r   g      @g&.>gMbp?gn2d?)
gԩ˰@g9~4b'@gaq(@g0p@gk"z?g4se?gU+F@gwQu%@gd6)@g)i!@)r`   rE   N)r   arrayr   rangerL   r   r   )
rO   r"   r&   r*   a0a1rE   r;   r    
x_expecteds
             r!   test_array_newtonzTestNewton.test_array_newton  s   	I 	I 	I	M 	M 	M	> 	> 	> X 
 
 
   fU2YY#%,Bub'2URZLRt,,

 	:&&&LRtT::::&&&LRd+++:&&&&&r#   c                    d }d }t          j        dd          }t          j        |||          }t	           ||          d           t          j        d          }t          j        |||          }t	           ||          d           t          j        ||          }t	           ||          d           d S )Nc                     | dz   dz   S )Nr                 ?r   r   s    r!   r=   z/TestNewton.test_array_newton_complex.<locals>.f7  s    q58Or#   c                     dS Nr   r   r   s    r!   r_   z4TestNewton.test_array_newton_complex.<locals>.fprime:  s    3r#   r   r   )r_           )r   fullrL   r   r   ones)rO   r=   r_   tr    s        r!   test_array_newton_complexz$TestNewton.test_array_newton_complex6  s    	 	 		 	 	 GArNNLAf---!b!!! GAJJLAf---!b!!!LA!b!!!!!r#   c                     t          j        d ddgt          j        ddg          g          }t	          |d           dS )	z8test secant doesn't continue to iterate zero derivativesc                     | | z  |d         z
  S )Nr   r   r    r>   s     r!   <lambda>z>TestNewton.test_array_secant_active_zero_der.<locals>.<lambda>K  s    qsQqTz r#   gˡE}@r         )r;   rE   )f~@g      @N)rL   r   r   r   r   rO   r    s     r!   !test_array_secant_active_zero_derz,TestNewton.test_array_secant_active_zero_derI  sO    L11uaj!xR1124 4 4344444r#   c                     t          j        d dgdz  ddgf          }t          |d           t          j        d d	gdz  d
dgf          }t          |d           d S )Nc                     || dz  z
  S r%   r   yzs     r!   r   z7TestNewton.test_array_newton_integers.<locals>.<lambda>Q      a!q&j r#         @r   g      .@g      1@r   )gNO@r   c                     || dz  z
  S r%   r   r  s     r!   r   z7TestNewton.test_array_newton_integers.<locals>.<lambda>U  r  r#   r      r   )rL   r   r   r  s     r!   test_array_newton_integersz%TestNewton.test_array_newton_integersO  s}    L003%!) $d|o/ / /ABBBL001#'"bLLLABBBBBr#   c                    t          t          t          j        d ddgd            t	          j        t                    5  t          j        d ddgd d          }t          |j        d           |j        	                                sJ |j
                                        rJ 	 d d d            d S # 1 swxY w Y   d S )	Nc                     | dz  dz
  S r%   r   r  s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>[  s    q!tax r#   r   c                     d| z  S r%   r   r  s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>[  s
    QU r#   c                     | dz  dz
  S r%   r   r  s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>^  s    QTAX r#   c                     d| z  S r%   r   r  s    r!   r   z@TestNewton.test_array_newton_zero_der_failures.<locals>.<lambda>_  s
    QqS r#   Tr   r   )r   RuntimeWarningrL   r   r   warnsr   rD   zero_derallrk   any)rO   r   s     r!   #test_array_newton_zero_der_failuresz.TestNewton.test_array_newton_zero_der_failuresX  s   ^U\''"b??	D 	D 	D \.)) 	/ 	/l#5#5Bx#0=dD D DGGL!,,,#'')))))(,,......	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s    A(B66B:=B:c                    d }d }d }d }t          |dd|          }t          |ddd          }t          |j        |j        d	
           t          d|j        z  |j                   t          |dd||          }t          |ddd          }t          |j        |j        d	
           t          d|j        z  |j                   d S )Nc                     | dz  d| z  z
  dz
  S r   r   r   s    r!   r"   z+TestNewton.test_newton_combined.<locals>.f1e  s    6AE>A%%r#   c                     d| z  dz
  S r%   r   r   s    r!   r&   z-TestNewton.test_newton_combined.<locals>.f1_1g  s    q519r#   c                     dd| z  z   S r(   r   r   s    r!   r*   z-TestNewton.test_newton_combined.<locals>.f1_2i  s    Q;r#   c                 0    | dz  d| z  z
  dz
  d| z  dz
  dfS )Nr   r   r)   r   r   s    r!   r-   z8TestNewton.test_newton_combined.<locals>.f1_and_p_and_ppl  s'    a4!A#:a<1Q++r#   r   r   )rQ   r;   r_   T:0yE>r   r   r^   )rQ   r;   r_   r`   )rQ   r;   r`   )r   r   rD   r   function_calls)rO   r"   r&   r*   r-   sol0sols          r!   test_newton_combinedzTestNewton.test_newton_combinedd  s   	& 	& 	&	 	 		 	 		, 	, 	, 2h1TBBB/(qNNN	38$7777Qs))4+>???2h1T4PPP/(q$OOO	38$7777Qs))4+>?????r#   c                 X   d}g d}t          d          D ]}ddd}dt          gdt          ggd |         D ]
\  }}|||<   t          j        t
          |fdd	i|\  }}t          |j                   t          ||j	                   t          |j
        |j        f||                    |d
k    r|j        |j
        dz   k    sJ n t          |j        |dz   |j
        z             |j
        dz
  }	t          j        t
          |f|	d	d|\  }}t          |j                    t          ||j	                   t          |j
        |	           |dk    rTt          j        t          d|	z            5  t          j        t
          |f|	dd|\  }}d d d            n# 1 swxY w Y   d S )Nr   ))      )r   r   )r   	   r   T)ra   rB   r_   r`   rC   Fr   r   )maxiterrC   z3Failed to converge after %d iterations, value is .*r   )r   r&   r*   rL   r   r"   r   rk   r   rD   
iterationsr  r   r   RuntimeError)
rO   r;   expected_countsderivsrT   rV   vr    rY   iterss
             r!   test_newton_full_outputz"TestNewton.test_newton_full_outputy  sH   
 333Ahh 	T 	TF!$99F"D)It+<=gvgF  1q		<B==U=f==DAqAK   AF###!,(89?6;RSSS{{'1<!+;;;;;;Q-
al/JKKK L1$E<BLELLVLLDAqO$$$AF###u---{{ ] OSXY[ [ [ T T !<BSDSSFSSDAqT T T T T T T T T T T T T T T1	T 	Ts   2FF!	$F!	c                     d }d }t          t          t          j        |d|d           t	          j        t          d          5  t          j        |d|           d d d            d S # 1 swxY w Y   d S )Nc                     | dz  dz
  S )Nr   r)   r   r   s    r!   r@   z0TestNewton.test_deriv_zero_warning.<locals>.func  s    6C<r#   c                     d| z  S r%   r   r   s    r!   dfuncz1TestNewton.test_deriv_zero_warning.<locals>.dfunc  s    q5Lr#   r   FrC   zDerivative was zeror   )r   r  rL   r   r   r   r)  )rO   r@   r2  s      r!   test_deriv_zero_warningz"TestNewton.test_deriv_zero_warning  s    	  	  	 	 	 	^U\4e%PPPP]</DEEE 	+ 	+LsE***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A**A.1A.c                     t          j        ddg          }|                                }t          t           j        |t           j                   t          ||           d S )N皙?r   )r   r   copyr   r   r   r   )rO   r;   x0_copys      r!   test_newton_does_not_modify_x0z)TestNewton.test_newton_does_not_modify_x0  sN    XsAh''))rvr26"""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        k    sn J |j        |j        d
z
  cxk    r&|j        cxk    r|j        cxk    r|j        dz  k    sn J d S )Nr   r   r   r   r]   r   r   T)r;   r<   ra   rB   r   r   r   )	r   r"   r   r   rD   shaper|   r(  r  )rO   res_newton_defaultres_secant_default
res_secants       r!   test_gh17570_defaultsz TestNewton.test_gh17570_defaults  s   
 )HNNN(Hq.24 4 4 B1$GGGJ
 	-233QTBBBB!&,7777-233QTBBBB!&,7777:?++QT::::$//// #'?1 1 1 1%01 1 1 1 1 1 #-%4q87 7 7 7(7 7 7 7 &07 7 7 7 &4Q6	7 7 7 7 7 7 7 7r#   rQ   r]   r   c                     d }t          |d|          }|j        sJ t          t          |j                  d           |j        j        t          j        t          j                  k    sJ d S )Nc                     | dz  dz
  S )Nr   r   r   s    r!   r=   z)TestNewton.test_int_x0_gh19280.<locals>.f  s    b519r#   r   )r;   rQ   g;f?)r   rk   r   absrD   dtyper   float64)rO   rQ   r=   ress       r!   test_int_x0_gh19280zTestNewton.test_int_x0_gh19280  st    
	 	 	 !&111}CHw///x~"*!5!5555555r#   N)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r.  r4  r9  r?  r   r   r   rG  r   r#   r!   r   r      sZ       E E EE E E	0 	0 	05 5 5	5 	5 	55 5 5L L L%' %' %'N" " "&5 5 5C C C
/ 
/ 
/@ @ @*#T #T #TJ+ + +( ( (8 8 8: [X(';<<6 6 =<6 6 6r#   r   c            	          dfd} t           j        t           j        g}t          x}}|D ].} || dd||          }t	          |||d|j        z             /d S )Nr6  c                     | z
  S r,   r   )r    rD   s    r!   r=   ztest_gh_5555.<locals>.f  s    4xr#   g    חg    cArs   z	method %s)ry   rc   err_msg)rL   r   r   TOLr   r   )r=   methodsrb   rc   rQ   rF  rD   s         @r!   test_gh_5555rM    s    D     |U\*GD4 ? ?fQc4888c4 +fo =	? 	? 	? 	? 	?? ?r#   c                      d } d}dt           z  }t          j        t          j        g}|D ]%} || dd||          }t	          d|||           &d S )	Nc                     | dk     rdS | dz
  S )Nr   g333333?r   r   s    r!   r=   ztest_gh_5557.<locals>.f  s    s774s7Nr#   gRQ?r   r   r   rs   rP  r   )
_FLOAT_EPSrL   brentqbrenthr   )r=   ry   rc   rL  rQ   rF  s         r!   test_gh_5557rT    s|       Dz>D|U\*G 8 8fQ14d333St$777778 8r#   c                      d} d}| |fD ]U\  }}}t          j        |          t          j        t          j        fD ]"} |fd||          }t          ||           #Vd S )N)g      |g     ug      y)g     u@g      |@g      y@c                 2    t          j        |           z
  S r,   r   )r    rz   s    r!   r   z9test_brent_underflow_in_root_bracketing.<locals>.<lambda>  s    26!99Q; r#   )r   r   rL   rS  rR  r   )underflow_scenariooverflow_scenarior>   r?   rD   rQ   rF  rz   s          @r!   'test_brent_underflow_in_root_bracketingrY     s    
 2-)+<= ' '
1dF4LL|U\2 	' 	'F&....155CD#&&&&	'' 'r#   c                   B    e Zd Z ej        dddd          Zd Zd ZdS )	TestRootResultsr   ,   .   r   )rD   r(  r  flagc                 N    d}t          t          | j                  |           d S )Nzm      converged: True
           flag: converged
 function_calls: 46
     iterations: 44
           root: 1.0)r   reprrY   )rO   expected_reprs     r!   	test_reprzTestRootResults.test_repr  s)    0 	T$&\\=11111r#   c                 >    t          | j        t                    sJ d S r,   )
isinstancerY   r   )rO   s    r!   	test_typezTestRootResults.test_type  s     $&.1111111r#   N)r   r   r   rL   rM   rY   rb  re  r   r#   r!   r[  r[    sM        sr"1MMMA2 2 22 2 2 2 2r#   r[  c                     d } d }d }t          dd          }d}t          j        | ||||d          }t           | |g|R  d	d
           |gdz  }d}t          j        | ||||d          }t           | |g|R  d	d
           dS )z&Test Halley's works with complex rootsc                 H    |d         | dz  z  |d         | z  z   |d         z   S )Nr   r   r   r   r   s     r!   r=   ztest_complex_halley.<locals>.f  s*    tad{QqTAX%!,,r#   c                 0    d|d         z  | z  |d         z   S )Nr   r   r   r   r   s     r!   r   z test_complex_halley.<locals>.f_1!  s    1Q4x!|ad""r#   c                 h    d|d         z  }	 t          |           }|g|z  S # t          $ r |cY S w xY w)Nr   r   )r   	TypeError)r    r>   retvalsizes       r!   r   z test_complex_halley.<locals>.f_2$  sS    QqT	#q66D 8d?"  	 	 	MMM	s   " 11r   r)   )r)   g      @r	  r   )rE   r_   r`   ra   r   r   r   N)r   rL   r   r   )r=   r   r   r  coeffsr  s         r!   test_complex_halleyrn    s    - - -# # ## # # 	SAFQsCTJJJAAAaM&MMM140000	
bAFQsCTJJJAAAaM&MMM14000000r#   c                     t          j        t                    j        dz  } d| z
  d| z   z  }t	                      5 }|                    t          d           t          j        d |gdz            }ddd           n# 1 swxY w Y   t          |d	gdz             d
}t	                      5 }|                    t          d           t          j        d |d          }ddd           n# 1 swxY w Y   t          |d           t          j        t          d          5  t          j        d |d          }ddd           n# 1 swxY w Y   d}t	                      5 }|                    t          d           t          j        d |d          }ddd           n# 1 swxY w Y   t          |d           t          j        t          d          5  t          j        d |d          }ddd           dS # 1 swxY w Y   dS )zBTest secant method with a non-zero dp, but an infinite newton stepgQ?g      i@r)   zRMS ofc                     | dz
  dz  S )Ng      Y@r   r   r  s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>E  s    AI> r#   r   r;   Nd   g.ЗK.?Tolerance ofc                     | dz
  dz  S Nr   r   r   r  s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>K      AG> r#   F)r;   rC   r   r   c                     | dz
  dz  S ru  r   r  s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>N  rv  r#   Tg.ЗK.c                     | dz   dz  S ru  r   r  s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>R  rv  r#   rF   c                     | dz   dz  S ru  r   r  s    r!   r   z%test_zero_der_nz_dp.<locals>.<lambda>U  rv  r#   )r   r
   r   r   r	   filterr  rL   r   r   r   r   r)  )dxp0supr    s       r!   test_zero_der_nz_dpr~  8  s    
%		$B "*r	"B			 A

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

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

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

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