
    Ug                        d dl Z d dlZd dlmZmZmZ d dlmZm	Z	 d dl
mc mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d	d
l m!Z! d Z"d Z#d Z$d Z%d Z&d Z'g e"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"ddfe"d dfe"d!dfe"d"d#fe#dd$fe#dd%fe#dd%fe#dd&fe#dd$fe#dd$fe#dd'fe#ddfe#d dfe#d!d(fe#d"dfe$ddfe$ddfe$ddfe$dd)fe$dd*fe$dd(fe$ddfe$dd+fe$d d+fe$d!dfe$d"dfe%d,d'fe%d-dfe%d.dfe%d/dfe%d0dfe%d1d'fe%d2d'fe%d3d'fe%d4d)fe%d5d)fe%d6d)fe&d,d%fe&d-d&fe&d.d$fe&d/d)fe&d0d'fe&d1d$fe&d2d&fe&d3d&fe&d4d'fe&d5d'fe&d6d$fZ( G d7 d8          Z)ee j*        +                    d9          e j*        ,                    d:d;d<d=g>           G d? d@e!                                              Z-dS )A    N)assert_allcloseassert_equalassert_array_less)statsspecial)array_api_compatible)array_namespacexp_assert_closexp_assert_equalxp_assert_less
xp_minimumis_numpyis_cupy)_chandrupatla_minimize_chandrupatla)_CHANDRUPATLA_TESTS)permutations   )TestScalarRootFindersc                 H    dd| dz  z
  dz  z  d| dz  z
  z   dd| z
  dz  z  z   S )Nd   r         @          @ xs    e/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_chandrupatla.pyf1r      s7    ArE	A~1b5)AqsRiK77    c                     d| dz
  dz  z   S )N   r      r   r   s    r   f2r$      s    B{?r    c                 6    t          j        |           d| z  z
  S )Nr"   )npexpr   s    r   f3r(      s    6!99qs?r    c                 0    | dz  d| dz  z  z
  d| z  z
  dz   S )N      @r"   r   g      4@r   r   s    r   f4r+      s&    b51QU7?SU"R''r    c                 6    d| dz  z  d| dz  z  z
  d| z  z
  dz   S )N      r      r   r   s    r   f5r0   "   s*    QT6AadF?QqS 1$$r    c                     d}d} | |          } | |          }||z
  }||k    r||||| fn|||||f\  }}}}}t          |          D ])}||z  }||z   }	 | |	          }
|
|k     r||	||
f\  }}}}) |||	|||
fS )Ngw?r   )range)funcx1x2phimaxiterr   r$   stepix3r(   s              r   _bracket_minimumr;   &   s    
CG	bB	bB7D79BwwRRdU33"$b"b$!7 BBD 7^^  $YT"XX77R^NBBr2r2r!!r          i   i   i   i   i   i i i    r-   r#   r/   	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿg      gc            	          e Zd Zd Zej                            dd ej        ddd          g          d             Z	ej                            d e
            d	d
dg          d             Zd Zd Zd Zej                            de          d             Zej                            ddddgf          ej                            dej        ej        ej        f          d                         Zd Zd Zd ZdS )TestChandrupatlaMinimizec                 Z    t          j                    }|                    ||z
             S N)r   normpdf)selfr   locdists       r   fzTestChandrupatlaMinimize.fw   s&    z||S!!!!r    rT   333333?g?rI   c                 `   t          | j        ddd|f          }|}t          j                            |j        |d           t          j                            |j        t          j        	                    d           dd           |j        j
        t          j
        |          k    sJ d S )Nr   r"   argsư>rtol)atolr_   )r   rV   r&   testingr   r   funr   rQ   rR   shape)rS   rT   resrefs       r   
test_basicz#TestChandrupatlaMinimize.test_basic{   s     %TVRASFCCC

""35#D"999

""37UZ^^A->->,>QQ"OOOu{bhsmm++++++r    rc   rH   r.      r.   r   r   c                     |r)t          j        ddd                              |          nd}|f}t           j         fd            } fdd_        t          ddd	|
          } ||                                          }d |D             }t          |j                                        |           t          |j        j
        |           d |D             }t          |j                                        |           t          |j        j
        |           t          |j          j        |j        g|R             d |D             }	t          |j                                        |	           t          |j        j
        |           t          j        |j        j        t           j                  sJ d |D             }
t          |j                                        |
           t          |j        j
        |           t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          t          j        |j                  j                   t          |j        j
        |j        j
                   t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          t          j        |j                  j        dz
             t          |j        j
        |j        j
                   t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          |j        j
        |           d |D             }t          |j                                        |           t          |j        j
        |           d |D             }t          |j                                        |           t          |j        j
        |           d |D             }t          |j                                        |           t          |j        j
        |           t          |j          j        |j        g|R             d |D             }t          |j                                        |           t          |j        j
        |           t          |j          j        |j        g|R             d |D             }t          |j                                        |           t          |j        j
        |           t          |j          j        |j        g|R             d S )NrL   rX   rH   rW   c                 8    t          j        ddd| f          S )NrZ   r   r"   r[   )r   rV   )
loc_singlerS   s    r   chandrupatla_singlezHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_single   s     )$&"a*OOOOr    c                  >    xj         dz  c_          j        | i |S Nr   f_evalsrV   r\   kwargsrV   rS   s     r   rV   z6TestChandrupatlaMinimize.test_vectorization.<locals>.f   )    IINII464*6***r    r   rZ   r"   r[   c                     g | ]	}|j         
S r   r   .0re   s     r   
<listcomp>z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>       '''3'''r    c                     g | ]	}|j         
S r   rb   rw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>       +++s37+++r    c                     g | ]	}|j         
S r   )successrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   s    333ss{333r    c                     g | ]	}|j         
S r   statusrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>       ///3CJ///r    c                     g | ]	}|j         
S r   nfevrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>       ---CH---r    c                     g | ]	}|j         
S r   nitrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r}   r    r.   c                     g | ]	}|j         
S r   xlrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>       )))S#&)))r    c                     g | ]	}|j         
S r   )xmrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r   r    c                     g | ]	}|j         
S r   xrrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r   r    c                     g | ]	}|j         
S r   flrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r   r    c                     g | ]	}|j         
S r   )fmrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r   r    c                     g | ]	}|j         
S r   frrw   s     r   ry   z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>   r   r    )r&   linspacereshape	vectorizerr   r   ravelr   r   r   rc   rb   rV   r   
issubdtypedtypebool_r   integerr   maxr   r   r   r   r   r   r   )rS   rc   rT   r\   rn   rd   refsref_xref_funref_successref_flagref_nfevref_nitref_xlref_xmref_xrref_flref_fmref_frrV   s   `                  @r   test_vectorizationz+TestChandrupatlaMinimize.test_vectorization   s<    >CKbk%r**225999v		P 	P 	P 	P 
	P	+ 	+ 	+ 	+ 	+ 	+ 	$QAqt<<<""3''--//''$'''u---SU[%(((++d+++111SW]E***SWfdfSU2T22233333d333S[&&((+666S[&...}S[.99999//$///SZ%%''222SZ%u---}SZ-rz:::::-----SX^^%%x000RVCH%%qy111SX^SW]333}SX^RZ88888++d+++SW]]__g...RVCG__aik222SW]CGM222}SW]BJ77777))D)))///SV\5)))))D)))///SV\5)))))D)))///SV\5)))))D)))///SV\5)))sv 5 5 5 5666))D)))///SV\5)))sv 5 5 5 5666))D)))///SV\5)))sv 5 5 5 566666r    c                 N   d }t          j        dt           j                  f}t          |dgdz  dgdz  t           j        gdz  |d          }t          j        t          j        t          j        t          j	        t          j
        g          }t          |j        |           d S )Nc                 P    d d d d gfdt          | |          D             S )Nc                     | dz
  dz  S )N      @r   r   r   s    r   <lambda>z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>       CA~ r    c                     | dz
  S NrI   r   r   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>   
    q2v r    c                     | dz
  dz  S )Nr   ri   r   r   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>   r   r    c                     t           j        S rP   )r&   nanr   s    r   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>   s    rv r    c                 8    g | ]\  }} |         |          S r   r   rx   r   jfuncss      r   ry   zBTestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<listcomp>   )    888DAqHE!HQKK888r    )zip)xsjsr   s     @r   rV   z.TestChandrupatlaMinimize.test_flags.<locals>.f   sF    --%%--%%'E
 9888CBKK8888r    ri   r   r   r   rI   r\   r7   )r&   arangeint64r   piarrayeim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRr   r   )rS   rV   r\   rd   	ref_flagss        r   
test_flagsz#TestChandrupatlaMinimize.test_flags   s    	9 	9 	9 	!28,,,.$QAs1urugaid-/1 1 1 Hco!m!m!n. / /	 	SZ+++++r    c                    t           j                            d          }|                    d          }d}|f}t          |dddd          }|                                }d|d<   t          | j        g|R i |}t          |j        |j	        z
            }t          |d	|d         z             d
|d<   t          | j        g|R i |}	t          |	j        |	j	        z
            }
t          |
d	|d         z             t          |
|           |                                }d|d<   t          | j        g|R i |}t          |j        |j	        z
            }t          |d	|d         z  t          |j                  z             d
|d<   t          | j        g|R i |}	t          |	j        |	j	        z
            }
t          |
d	|d         z  t          |	j                  z             t          |
|           |                                }d|d<   t          | j        g|R i |}t          |j        d|j        z  z
  |j        z             }t          |d|d         z             d
|d<   t          | j        g|R i |}	t          |	j        d|	j        z  z
  |	j        z             }t          |d|d         z             t          ||           |                                }d|d<   t          | j        g|R i |}t          |j        d|j        z  z
  |j        z             }t          |d|d         z  t          |j                  z             d
|d<   t          | j        g|R i |}	t          |	j        d|	j        z  z
  |	j        z             }t          |d|d         z  t          |	j                  z             t          ||           d S )N   FA92 r.   sizerZ   r   r"   r   r\   xatolxrtolfatolfrtolMbP?r   ri   r]   r   r   r   r   )r&   randomdefault_rngdictcopyr   rV   absr   r   r   r   r   r   r   rb   )rS   rngpbracketr\   kwargs0rt   res1j1res2j2h1h2s                r   test_convergencez)TestChandrupatlaMinimize.test_convergence   s   i##$788JJAJtD!1EEEw%dfAwAAA&AA47"##"aw/000w%dfAwAAA&AA47"##"aw/000"b!!!w%dfAwAAA&AA47"##"aw/DF;<<<w%dfAwAAA&AA47"##"aw/DF;<<<"b!!!w%dfAwAAA&AA1tw;&011"aw/000w%dfAwAAA&AA1tw;&011"aw/000"b!!!w%dfAwAAA&AA1tw;&011"aw/DH=>>>w%dfAwAAA&AA1tw;&011"aw/DH=>>>"b!!!!!r    c                     dddt           j        gR fd}t          j        |j                  rJ t          j        |j        dz   k              sJ t          j        |j        k              sJ  fdt          j        _	        t          j        _
        d_        d _        t           j        gR fd}|                                D ]~}|d	k    rN||         t          j        k    sJ j        |         t          j        k    sJ ||         t          j        k    sJ V||         j        |         cxk    r||         k    sn J d S )
N~,?r   r"   r   r.   c                 N   xj         dz  c_         | _        t          | d          sJ j         dk    r| j        | j        | j        fk    sJ n[| j        j        k    | j        j        k    z  }| j        j        k    | j        j        k    z  }t          j        ||z            sJ | j        _        | j        _        | j        t          j
        k    sJ t                              | j                  | j                   t                              | j                  | j                   t                              | j                  | j                   t                              | j                  | j                   j         k    rt$          d S Nr   r   r   )iterrd   hasattrr   r   r   r&   allr   r   _EINPROGRESSr   rV   r   r   r   r   rb   StopIteration)rd   
changed_xr
changed_xlr   callbackrT   r7   rS   s      r   r   z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callback(  s|   MMQMMHL3$$$$$}!!/7:::::!f3(+8MN
!f3(+8MN
vj:566666&HK&HK:!11111,,cf555,,cf555,,cf555s++SW555}''## ('r    r<   r\   r   r   )r   rV   r&   anyr   r   r   r   r   r   r   r   rd   keysr   r   r   
_ECALLBACK)rS   rd   r   keyr   r   rT   r7   s   `   @@@@r   test_maxiter_callbackz.TestChandrupatlaMinimize.test_maxiter_callback  s   $TV 6g 6 6SF-46 6 66#+&&&&&vch'!)+,,,,,vcg()))))	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$, ff%df 9w 9 9cV/79 9 9
 88:: 	B 	BCh3x3=0000|C(C,<<<<<CyCN22222CyHL$5AAAASAAAAAAA	B 	Br    casec           
          |\  }}}d}||z   }t          |||          \  }}}}}	}
d}d}d}d}t          ||||||||          }t          |j        |           d S )Ng?g-C6?r]   gؗҜ<)r   r   r   r   )r;   r   r   r   )rS   r  r3   r4   r   r8   r5   r:   r   r$   r(   r   r   r   r   rd   s                   r   test_nit_expectedz*TestChandrupatlaMinimize.test_nit_expectedP  s    
 b# $Y!1$B!?!?BBB $T2r2U+0UL L LSWc"""""r    g?gffffff?r   c           	      ,    |          }fd}t          | d           d           d          |f          }|j        j        k    sJ t          |j        |t	          j        t	          j                  j                             d S )Nc                 T    | j         k    sJ | |z
  dz                                S Nr   )r   astype)r   rT   r   s     r   rV   z.TestChandrupatlaMinimize.test_dtype.<locals>.fm  s2    7e####WN**5111r    r   r"   r[   r^   )r   r   r   r   r&   sqrtfinfoeps)rS   rT   r   rV   rd   s     `  r   
test_dtypez#TestChandrupatlaMinimize.test_dtypef  s    
 eCjj	2 	2 	2 	2 	2 %Qb		5588UU1XX+.&2 2 2u{e####s%1D)E)EFFFFFFr    c                    d}t          j        t          |          5  t          d ddd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddd           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  t          d
 ddgddgg d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d ddgddgddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d dddd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dddt          j                   d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dddd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dddt          j                   d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d dddd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d  dddd           d d d            n# 1 swxY w Y   d!}t          j        t          |          5  t          d" dddd#$           d d d            d S # 1 swxY w Y   d S )%N`func` must be callable.matchr@   r   ri   3Abscissae and function output must be real numbers.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>      Q r                ?z+shape mismatch: objects cannot be broadcastc                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    r>   r  r.   ri   r"   z:The shape of the array returned by `func` must be the samec                 0    | d         | d         | d         gS Nr   r   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  s    adAaD!A$-? r    r"   (Tolerances must be non-negative scalars.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    r<   )r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    )r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    ekki)r   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    )r   )`maxiter` must be a non-negative integer.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r          ?r7   c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    `callback` must be callable.c                     | S rP   r   r   s    r   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r    	shrubbery)r   )pytestraises
ValueErrorr   r&   r   )rS   messages     r   test_input_validationz.TestChandrupatlaMinimize.test_input_validationv  s    -]:W555 	3 	3"4Q222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 H]:W555 	= 	=";;q!<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= @]:W555 	M 	M";;R1a&)))LLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M O]:W555 	3 	3"#?#?"b$%q6Aq63 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 =]:W555 	D 	D";;AqCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D]:W555 	H 	H";;AqGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H]:W555 	H 	H";;AqGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H]:W555 	H 	H";;AqGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H >]:W555 	G 	G";;Aq#FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G]:W555 	F 	F";;Aq"EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 1]:W555 	P 	P";;Aq;OOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   =AA%BB	B	-CCC;D!!D%(D%	E++E/2E/ F==GG#HH	H	+ III?J!!J%(J%K))K-0K-L44L8;L8c                     t          j        ddd          d d t           j        f         }t          j        t	          t          g d                              j        }t          | j        g|R d|fi}t          j	        t          j
        |j        |          |j        |                     ||          k    z            sJ |j        d d df         }t          t          j        |j        j        |          ddi d S )	Nr<   r   r#   r   r\   r   r_   V瞯<)r&   r   newaxisr   listr   Tr   rV   r   iscloser   rb   r   broadcast_arrays)rS   rT   bracketsrd   re   s        r   test_bracket_orderz+TestChandrupatlaMinimize.test_bracket_order  s    k"a##AAArzM28Djjj!9!9::;;=$TVDhDDDcVDDvbj,,466#s;K;K0KLMMMMMeAAAqDk,SUWc::GGGGGGr    c           
         d }t          j        d          5  t          |ddddd          }d d d            n# 1 swxY w Y   |j        sJ t	          |j        dd	
           t          |j        d           d }t          |ddd          }|j        sJ t          |j        d           d }d}t          |g|R ddi}|j        sJ |j	        |k                |j
        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ d }t          |dddd          }t	          |j        d           d }t          |ddt           j        dddd          }|j        sJ |j        |j        cxk     r|j	        k     sn J  ||j                   ||j                  cxk    r ||j	                  k    sn J d S )Nc                 ^    t          j        | j        t           j                  sJ | dz
  dz  S )Nr   r   )r&   r   r   floatingr   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s,    ="+66666aCC<r    ignoreinvalidr   r-   )r   r   r   r   r^   c                     | dz
  dz  S Nr   r   r   r   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f      aC!8Or    c                     | dz
  dz  S r=  r   r   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  r>  r    )r  皙?r"   r7   r.   r>   r@  c                     | |z
  dz  dz
  S )Nr   r   r   r   cs     r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    aC!8a<r    r<   UUUUUU?r[   c                 ,    t          j        |            S rP   )r&   sinr   s    r   rV   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    F1II:r    )r   r   r   r   )r&   errstater   r   r   r   r   rb   r   r   r   r   r   r   r   )rS   rV   rd   r   s       r   test_special_casesz+TestChandrupatlaMinimize.test_special_cases  s   
	  	  	  [*** 	H 	H(B1AQGGGC	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H{qt,,,,SWa   	 	 	 %Q1a00{SUA	 	 	 $Q<<<<!<<v((sv((((w!||||x1}}}}zRu||||	  	  	  %QAqs;;;s###	 	 	 %Q1be1A+,A7 7 7{v''''''''''qyyAAcfII22223622222222s   ;??N)__name__
__module____qualname__rV   r'  markparametrizer&   r   rf   tupler   r   r   r   casesr  float16float32float64r  r+  r4  rH  r   r    r   rN   rN   u   s       " " " [US+"+eT2*F*F$GHH, , IH, [Wuuwwvy&IJJJ7 J7 KJJ7X, , ,,2" 2" 2"h2B 2B 2Bh [VU++# # ,+#* [UTD#;$788[Wrz2:rz&JKKG G LK 98G'P 'P 'PRH H H53 53 53 53 53r    rN   skip_xp_backendsarray_api_strictz	jax.numpyz)Currently uses fancy indexing assignment.z*JAX arrays do not support item assignment.)reasonsc            	          e Zd Zd Zej                            dd ej        ddd          g          d             Z	ej                            d e
            d	d
dg          d             Zd Zd Zd Zej                            de          d             Zej                            ddddgf          ej                            dd          d                         Zd Zd ZdS )TestChandrupatlac                 0    t          j        |          |z
  S rP   )r   ndtr)rS   qr   s      r   rV   zTestChandrupatla.f  s    |A""r    r   rW   rL   rX   rI   c                    |                     d          |                     d          }}t          | j        |||                     |          f          }|                     t          j                                        |          |                     |          j                  }t          |j        |           d S )N      r*   r[   r   )	asarray_chandrupatla_rootrV   r   rQ   ppfr   r
   r   )rS   r   xpabrd   re   s          r   rf   zTestChandrupatla.test_basic  s     zz#

21 ARZZ]]4DEEEjj))!,,BJJqMM4GjHHs#####r    rc   rg   rh   rj   c           
          |r)t          j        ddd                              |          nt          j        d          }|                    |          }|f}|j        }t          |          }t           j         fd            } fdd_        t          |                    d          |                    d	          |
          }	 ||          
                                }
d |
D             }|                    |                    ||          |          }t          |	j        |           d |
D             }|                    |                    ||          |          }t          |	j        |d           t          |	j          j        |	j        g|R             d |
D             }|                    |                    ||j                  |          }t          |	j        |           d |
D             }|                    |                    ||j                  |          }t          |	j        |           d |
D             }|                    |                    ||j                  |          }t)          |          r;t          |	j        |           |                    |	j                  j        k    sJ n)|	j        j        |k    sJ |	j        j        |j        k    sJ d |
D             }|                    |                    ||j                  |          }t)          |          r>t          |	j        |           |                    |	j                  j        dz
  k    sJ n)|	j        j        |k    sJ |	j        j        |j        k    sJ d |
D             }|                    |                    ||          |          }t          |	j        |           d |
D             }|                    |                    ||          |          }t          |	j        |           t7          |	j        |	j                   |                    |	j                  }|                    |	j        |         |	j        |         k    |	j        |         |	j        |         k    z            sJ t)          |          rdnd}d |
D             }|                    |                    ||          |          }t          |	j        ||           t          |	j          j        |	j        g|R             d |
D             }|                    |                    ||          |          }t          |	j        ||           t          |	j          j        |	j        g|R             |                    |                     |	j        |                   tC          |                     |	j        |                   |                     |	j        |                             k              sJ d S )NrL   rX   rH   rW   c                 6    t          j        dd| f          S )NrZ   r"   r[   )r^  rV   )r   rS   s    r   rn   z@TestChandrupatla.test_vectorization.<locals>.chandrupatla_single  s    %dfb!1$????r    c                  >    xj         dz  c_          j        | i |S rp   rq   rs   s     r   rV   z.TestChandrupatla.test_vectorization.<locals>.f  ru   r    r   r\  r*   r[   c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>	  rz   r    r   c                     g | ]	}|j         
S r   r|   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>  r}   r    r-  r`   c                 6    g | ]}t          |j                  S r   )boolr   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>  s"    999StCK((999r    c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>  r   r    c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>  r   r    c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>#  r}   r    r   c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>,  r   r    c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>0  r   r    g&.>c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp><  r   r    c                     g | ]	}|j         
S r   r   rw   s     r   ry   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>A  r   r    )"r&   r   r   rR  r]  r   r	   r   rr   r^  r   r
   r   rb   r   rV   rj  r   int32r   r   r   r   rc   r   r   r   r   isfiniter   r   r   r   r   )rS   rc   r`  r   p_xpargs_xpr   xp_testrn   rd   r   r   r   r   r   r   r   r   r   finiter`   r   r   rV   s   `                      @r   r   z#TestChandrupatla.test_vectorization  s     =B "R[b))11%888*S// 	
zz!}}'
!$''		@ 	@ 	@ 	@ 
	@	+ 	+ 	+ 	+ 	+ 	+ 	 BJJsOORZZ^^'RRR""1%%++--''$'''

2::e5:995AAu%%%++d+++**RZZuZ==uEEu5555!8!8!8!899999D999jjKw|!L!LeTT[111//$///::bjjjBBEJJ
H--------::bjjjBBEJJB<< 	.CHh///66#(##qy000008>U****8>RX----++d+++**RZZrxZ@@%HHB<< 	-CGW---66#'??aik111117=E))))7=BH,,,,))D)))BJJvUJ;;UCC'''))D)))BJJvUJ;;UCC'''svsv&&&SU##vvsuV}v6v#&.8: ; ; 	; 	; 	; !.uu$))D)))BJJvUJ;;UCCT2222sv 8 8 8 8999))D)))BJJvUJ;;UCCT2222sv 8 8 8 8999vvbffSWV_-- v!7!7!#v!7!79 99 : : 	: 	: 	: 	: 	:r    c                    fd}                     dj                  f}                    dgdz                                j        gdz            }}t	          ||||d          }                    t
          j        t
          j        t
          j        t
          j	        gj
                  }t          |j        |           d S )Nc                     |j         j        k    sJ t                    r(d d d fdgfdt          | |          D             S d d d fd	gfd
t          | |          D             S )Nc                     | dz
  S Nr   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>S  s
    1s7 r    c                     | dz
  S r   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>T  s
    1r6 r    c                     | dz
  dz  S N皙?r.   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>U  s    AGa< r    c                 :                         | j                  S rP   )	full_liker   r   r`  s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>V  s    2<<26#:#: r    c                 R    g | ]#\  }} t          |                   |          $S r   )intr   s      r   ry   z:TestChandrupatla.test_flags.<locals>.f.<locals>.<listcomp>W  s1    AAATQc!ffa((AAAr    c                     | dz
  S r{  r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>Y  s
    q3w r    c                     | dz
  S r   r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>Z  r   r    c                     | dz
  dz  S r~  r   r   s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>[  r   r    c                     j         S rP   )r   r  s    r   r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>\  s	    rv r    c                 8    g | ]\  }} |         |          S r   r   r   s      r   ry   z:TestChandrupatla.test_flags.<locals>.f.<locals>.<listcomp>]  r   r    )r   r   r   r   )r   r   r   r`  s     @r   rV   z&TestChandrupatla.test_flags.<locals>.fM  s     8rx''''r{{ B**))//::::< BAAASR[[AAAA&&%%--%%%%'E 9888CBKK8888r    ri   r           r   r   )r   r   r]  r   r^  r   r   r   r   r   rr  r   r   )rS   r`  rV   r\   ra  rb  rd   r   s    `      r   r   zTestChandrupatla.test_flagsJ  s    	9 	9 	9 	9 	9$ 		!28	,,.zz2$q&!!2::rugai#8#81 AqtQ???JJ # # # 0 8:x  A A	 	
I.....r    c           	         t           j                            d          }|                    |                    d                    }|                    d           |                    d          f}|f}t	          |dddd          }|                                }d|d<   t          | j        g|R i |}t          |j	        |j
        z
  |                    |d                     d	|d<   t          | j        g|R i |}	t          |	j	        |	j
        z
  |                    |d	                     t          |	j	        |	j
        z
  |j	        |j
        z
             |                                }d|d
<   t          | j        g|R i |}t          |j	        |j
        z
  d|                    |j                  z             d	|d
<   t          | j        g|R i |}	t          |	j	        |	j
        z
  d	|                    |	j                  z             t          |	j	        |	j
        z
  |j	        |j
        z
             |                                }d|d<   t          | j        g|R i |}t          |                    |j                  |                    |d                     d	|d<   t          | j        g|R i |}	t          |                    |	j                  |                    |d	                     t          |                    |	j                  |                    |j                             |                                }d|d<   |\  }
}t          |                     | j        |
g|R            |                     | j        |g|R                      }t          | j        g|R i |}t          |                    |j                  d|z             d	|d<   t          | j        g|R i |}	t          |                    |	j                  d	|z             t          |                    |	j                  |                    |j                             d S )Nr   r.   r   r*   r   r   r   r   r]   r   r   r   )r&   r   r   r]  r   r   r^  rV   r   r   r   r  r   r   rb   r   )rS   r`  r   r   r   r\   r   rt   r   r   r4   r5   f0s                r   r   z!TestChandrupatla.test_convergencei  s"   i##$788JJszzqz))**JJrNN?BJJrNN3tD!1EEEw!$&=7===f==tw(",,q$*?*?@@@w!$&=7===f==tw(",,q$*?*?@@@tw($'DG*;<<<w!$&=7===f==tw($*?@@@w!$&=7===f==tw($*?@@@tw($'DG*;<<<w!$&=7===f==rvvdh''a)>)>???w!$&=7===f==rvvdh''a)>)>???rvvdh'')9)9:::wBvtvb0400011266&$&:Kd:K:K:K3L3LMM!$&=7===f==rvvdh''b111w!$&=7===f==rvvdh''b111rvvdh'')9)9:::::r    c                    	                      d          	                     d                               d          fdfdd _        d _        t          gR 	fd}                    |j                  rJ                     |j        dz   k              sJ                     |j        k              sJ 	 fdd	_	        d _
        d _        d _        t          gR 	fd
}|                                D ]}|dk    rut          ||                              t          j        j                             t          ||                              t          j        j                             }|                    d          rt          ||         ||                    d S )Nr   r\  r*   r"   c                 R    t          j        |           |z
  }| _        |_        |S rP   )r   rY  r   rb   )rZ  r   rd   rV   s      r   rV   z1TestChandrupatla.test_maxiter_callback.<locals>.f  s(    ,q//A%CACAEJr    r   r   c                    xj         dz  c_         | _        t          | d          sJ j         dk    r| j        | j        fk    sJ nZ| j        j        k    | j        j        k    z  | j        j        k    | j        j        k    z  z  }                    |          sJ | j        _        | j        _        | j        t          j        k    sJ t          
                    | j                  | j                   t          
                    | j                  | j                   t          
                    | j                  | j                   j         k    rt          d S r   )r   rd   r   r   r   r   r   r   r   r   rV   r   r   r   rb   r   )rd   changedr   r   r7   r   rS   r`  s     r   r   z8TestChandrupatla.test_maxiter_callback.<locals>.callback  sU   MMQMMHL3$$$$$}!!'722222 Vx{2sv7LM"v48;9NOQvvg&&&&HK&HK:!11111DFF361--sv666DFF361--sv666DFF35!,,cg666}''## ('r    r<   r   r   r   _)r]  r   rb   r^  r   r   r   r   r   r   rd   r   r   r   r   r   r   rr  r   
startswith)
rS   r`  rd   r   r   r   r   rV   r7   r   s
   ``   @@@@@r   r   z&TestChandrupatla.test_maxiter_callback  s   JJx  ::c??BJJrNN3	 	 	 	 	
  IWIIA4III66#+&&&&&vvch'!)+,,,,,vvcg()))))	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$( !!LgLLQD8LLL 88:: 	5 	5ChC"**S]"(**S*STTTS	2::cnBH:+U+UVVVV$$ 5S	3s84444	5 	5r    r  c                    |\  }}}}}|                     |d         |j                  |                     |d         |j                  f}|                     ||j                  }t          |g|R ddd}t          |j        |                      ||          |j                  dd	           t          |j        |                     ||j                             d S )
Nr   r   r   g|=gh㈵>)r   r   g:0yE>gMb`?)r_   r`   )r]  rR  r^  r
   rb   r   r   rr  )	rS   r  r`  rV   r   rootnfevalidrd   s	            r   r  z"TestChandrupatla.test_nit_expected  s    
 (,$7D&"
 ::gaj
:;;::gaj
:;;=zz$bjz11 FWFFEFFFAAdGG2:!F!F!	. 	. 	. 	."**V28*"D"DEEEEEr    r  gCl?gV-?r   )rP  rQ  rR  c                 ,   t                     }|rdk    rt          j        d           t          d           t          j         d            fd}                    d                              d          }}                    |          }t          ||||fd	          }	 t          |j        |d
           d S # t          $ r4 |j        j	        k    sJ 
                    |j        dk               Y d S w xY w)NrP  z0`float16` dtype only supported for NumPy arrays.z does not support c                 d    | |z
  dz  }t                    r                    |          S |S )Nr   r   )r   r]  )r   r  rd   r   r`  s      r   rV   z&TestChandrupatla.test_dtype.<locals>.f  s:    t8"C|| 4zz#Uz333Jr    r  r   r.   r   )r\   r   rh  r   )r   r'  skipgetattrr]  r^  r
   r   AssertionErrorr   r   rb   )	rS   r  r   r`  	not_numpyrV   ra  rb  rd   s	     ``     r   r  zTestChandrupatla.test_dtype  sW    !$	 	L)++KJKKKE4((=K28888999	 	 	 	 	 	 zz"Ez**BJJqJ,F,F1zz$ez,, AqwdCCC	!CE4d333333 	! 	! 	!5;%''''FF37a<      	!s   <C :DDc                    d }d}t          j        t          |          5  |                    d          |                    d          f}t	          d g|R   d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                    d          |                    d          f}t	          |g|R   d d d            n# 1 swxY w Y   d}t          j        t          t
          f|          5  |                    d	d
g          |                    g d          f}t	          |g|R   d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                    d
d
g          |                    ddg          f}t	          d g|R   d d d            n# 1 swxY w Y   d}|                    d          |                    d          f}t          j        t          |          5  t	          |g|R ddi d d d            n# 1 swxY w Y   t          j        t          |          5  t	          |g|R d|j        i d d d            n# 1 swxY w Y   t          j        t          |          5  t	          |g|R ddi d d d            n# 1 swxY w Y   t          j        t          |          5  t	          |g|R d|j        i d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          |g|R ddi d d d            n# 1 swxY w Y   t          j        t          |          5  t	          |g|R ddi d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          |g|R ddi d d d            d S # 1 swxY w Y   d S )Nc                     | S rP   r   r   s    r   r3   z4TestChandrupatla.test_input_validation.<locals>.func  s    Hr    r  r  r@   ri   r  r  z...not be broadcast...r>   r  r  z,The shape of the array returned by `func`...r"   c                 0    | d         | d         | d         gS r  r   r   s    r   r   z8TestChandrupatla.test_input_validation.<locals>.<lambda>  s    !A$!ad); r    r  r   r<   r   r   r  r   r  r7   r!  r$  r   r&  )r'  r(  r)  r]  r^  RuntimeErrorr   )rS   r`  r3   r*  r   s        r   r+  z&TestChandrupatla.test_input_validation  s   	 	 	 -]:W555 	/ 	/jjnnbjjmm3Gt.g....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ H]:W555 	/ 	/jj''A6Gt.g....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 +]J5WEEE 	/ 	/jj"b**BJJyyy,A,AAGt.g....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ A]:W555 	G 	Gjj"b**BJJ1v,>,>>G;;FgFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G =**R.."**Q--/]:W555 	9 	9t8g888R888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9]:W555 	= 	=t<g<<<RV<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]:W555 	= 	=t<g<<<V<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]:W555 	= 	=t<g<<<RV<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= >]:W555 	< 	<t;g;;;s;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<]:W555 	; 	;t:g:::r:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 1]:W555 	E 	EtDgDDDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   8A%%A),A)8CCC <EEE0=F99F= F=H((H,/H,I00I47I4J33J7:J7K;;K?K?#M  MM&NN
N+O		OOc                 
   d }|                     g d          |                     g d          }}t          j        dd          5  t          |||          }d d d            n# 1 swxY w Y   |                    |j                  sJ t          |j        dd          |                    d|j        d                              t          |          fd	}t          ||                     d
          |                     d                    }|j        sJ t          |j        |                     d                     d }|                     ddg          }t          ||                     d          |                     d          |f          }t          |j        |                     ddg                     t          |j        |                     t          j        dg                     d }t          j        d          5  |                     |j                  }t          |||          }d d d            n# 1 swxY w Y   |j        sJ t          |j        |                     t          j                             d }|                     d          |                     d          }}t          |||d          }t          |j        |                     d                     t          |j        |                     d|j                             t          |j        |                     d|j                             t          |j        |                     d|j                             t          |j        |           t          |j        |           t          |j        |           t          || | d          }t          |j        |            t          |||d          }t          |j        |                     d                     t          |j        |                     d|j                             t          |j        |                     d|j                             t          |j        |                     d|j                             t          |j        |                     d                     d }t          ||                     d          |                     d          |                     d                    }t          |j        |                     d                     d S )Nc                 &    d| z  dz   d|  dz   z  z
  S rp   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f2  s    q519qQBF|++r    )r  r  r  r  )?      ?r  r  r8  )divider:  r   )r.   r   c                 N                         | j        d          sJ | dz  dz
  S )Nzreal floating   r   )isdtyper   )r   rv  s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f@  s-    ??17O<<<<<7Q;r    r;  r"   r  c                     | dz  |z
  S r  r   )r   r  s     r   rV   z.TestChandrupatla.test_special_cases.<locals>.fL  s    a4$;r    r[   FTc                     d| z  S rp   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.fT  s    Q3Jr    r9  c                     | dz  dz
  S )Nr.   r   r   r   s    r   rV   z.TestChandrupatla.test_special_cases.<locals>.f^  s    a4!8Or    g      r*   r"  r>   r   r   r.   c                     || z  dz
  S rp   r   rB  s     r   rV   z.TestChandrupatla.test_special_cases.<locals>.fx  s    Q37Nr    r<   rD  )r]  r&   rG  r^  r   r   r
   r   fullr	   r   r   infr   rr  r   r   r   r   )	rS   r`  rV   ra  rb  rd   r  r  rv  s	           @r   rH  z#TestChandrupatla.test_special_cases.  s>   	, 	, 	, zz,,,--

;O;O;O0P0P1[(;;; 	. 	.$Q1--C	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. vvck"""""abb	2774q#:#:;;; "!$$	 	 	 	 	 !BJJrNNBJJqMMBB{rzz"~~...	 	 	 zz1a&!! BJJqMM2::a==wOOORZZ%>%>???rzz262,77888	 	 	 [*** 	2 	2**RV$$C$QS11C	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 {rzz"&11222	 	 	 zz#

21 Aq!444RZZ%6%6777
BJJrJ$B$BCCCARX!>!>???"**Qbh*"?"?@@@""""""q!!! QBA666r""" !Aq!444RZZ%5%5666
BJJqJ$A$ABBBARX!>!>???"**Qbh*"?"?@@@rzz"~~...	 	 	 !BJJrNNBJJqMM

STVVVrzz#/////s$   	A''A+.A+,IIIN)rI  rJ  rK  rV   r'  rL  rM  r&   r   rf   rN  r   r   r   r   r   r  r  r+  rH  r   r    r   rW  rW    s       # # # [S3E4(D(D"EFF$ $ GF$ [Wuuwwvy&IJJU: U: KJU:n/ / />,; ,; ,;\75 75 75r [V%899F F :9F$ [VeeU^%<==[W&GHH! ! IH >=!2.E .E .E`N0 N0 N0 N0 N0r    rW  ).r'  numpyr&   numpy.testingr   r   r   scipyr   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy.conftestr   scipy._lib._array_apir	   r
   r   r   r   r   r   scipy.optimize._chandrupatlar   r   r^  scipy.optimize._tstutilsr   	itertoolsr   
test_zerosr   r   r$   r(   r+   r0   r;   rO  rN   rL  usefixturesrS  rW  r   r    r   <module>r     s        J J J J J J J J J J                 6 6 6 6 6 6 6 6 6 / / / / / /R R R R R R R R R R R R R R R R R RO O O O O O O O 8 8 8 8 8 8 " " " " " " - - - - - -8 8 8    ( ( (% % %" " "(8	RL8	RL8	 RL8	 RL	8	
 bM8	 bM8	 bM8	 rN8	 rN8	 rN8	 O8	 QK8	 QK8	 QK8	 QK8	  aL!8	" aL#8	$ aL%8	& rN'8	( rN)8	* rN+8	, O-8	. RL/8	0 RL18	2 RL38	4 RL58	6 bM78	8 bM98	: bM;8	< rN=8	> rN?8	@ rNA8	B OC8	D NE8	F OG8	H OI8	J OK8	L OM8	N NO8	P NQ8	R NS8	T OU8	V OW8	X OY8	Z N[8	\ N]8	^ N_8	` Oa8	b Nc8	d Ne8	f Ng8	h Ni8	j Nk8	l Nm8	n No8	vh3 h3 h3 h3 h3 h3 h3 h3V +,,0+'R'S'U  V VW0 W0 W0 W0 W0, W0 W0V V -, 
W0 W0 W0r    