
    bi                     v   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
c mZ d dlm
c mZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZ d dl m!Z! d	 Z"d
 Z# e#e      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+ ee       G d7 d8             Z, ee       G d9 d:             Z-y);    N)deepcopy)statsspecial)array_namespaceis_cupyis_numpyxp_ravelxp_sizemake_xp_test_case)xp_assert_closexp_assert_equalxp_assert_less)find_minimum	find_root)_CHANDRUPATLA_TESTS)permutationsc                       fd}|S )Nc                       fd}|S )Nc                     | d   j                   }| D cg c]  }t        |       } }g }t        t        j                  |            D ](  }| D cg c]  }||   	 }}|j                   |        * |S c c}w c c}w )Nr   )xp)shaper	   rangemathprodappend)
arg_arraysr   	arg_arrayresiarg_scalarsfr   s         a/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test_chandrupatla.pywrappedz._vectorize.<locals>.decorator.<locals>.wrapped   s    qM''EFPQ(94QJQC499U+, ,=GH	y|HH

1k?+, J R Is   A8A= )r!   r#   r   s   ` r"   	decoratorz_vectorize.<locals>.decorator   s    	     r$   )r   r%   s   ` r"   
_vectorizer'      s    
 r&   c                       fd}|S )Nc                    h d}|D ci c]  }||v s||j                  |       }}|j                  dd       t              r	fd}n} 	| |f||d|}	t        k(  r3|j                  \  |_        |_        |j                  \  |_        |_        n>|j                  \  |_        |_	        |_        |j                  \  |_        |_
        |_        |j                  |_        |`|`|`|S c c}w )N>   fatolfrtolxatolxrtolcallbackc                 6   t         k(  r3| j                  \  | _        | _        | j                  \  | _        | _        n>| j                  \  | _        | _        | _        | j                  \  | _        | _        | _        | j                  | _
        | `| `| `	 |       S N)r   bracketxlxr	f_bracketflfrxmfmf_xfun)r   	_callbackfuncs    r"   r.   zC_wrap_chandrupatla.<locals>._chandrupatla_wrapper.<locals>.callback8   s}    9$%([[NCFCF%(]]NCFCF-0[[*CFCFCF-0]]*CFCFCF''KMG ~%r&   )
tolerancesr.   )popcallabler   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   )
r!   r1   kwargstol_keyskeyr=   r.   r   r;   r<   s
           @r"   _chandrupatla_wrapperz1_wrap_chandrupatla.<locals>._chandrupatla_wrapper2   s    76>Ps#-c6::c?*P
PJJz40	I& !H1gR*xR6R9 [[NCFCF ]]NCFCF%([["CFCFCF%(]]"CFCFCF''KMG
; Qs
   	C1C1r$   )r<   rC   s   ` r"   _wrap_chandrupatlarD   1   s     B ! r&   c                 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    r"   f1rM   Y   s7    ArE	A~1b5)AqsRiK77r&   c                     d| dz
  dz  z   S )N   rJ      r$   rK   s    r"   f2rQ   ]   s    B{?r&   c                 F    t        |       }|j                  |       d| z  z
  S )NrO   )r   exprL   r   s     r"   f3rU   a   s"    		B66!9qs?r&   c                 0    | dz  d| dz  z  z
  d| z  z
  dz   S )N      @rO   rH   g      4@r$   rK   s    r"   f4rX   f   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      rI      r$   rK   s    r"   f5r]   j   s*    QT6AadF?QqS 1$$r&   c                     d}d} | |      } | |      }||z
  }||kD  r||||| fn|||||f\  }}}}}t        |      D ]&  }||z  }||z   }	 | |	      }
|
|k  r||	||
f\  }}}}& n ||	||
fS )Ngw?rF   )r   )r<   x1x2phimaxiterrM   rQ   stepr   x3rU   s              r"   _bracket_minimumre   n   s    
CG	bB	bB7D79BwRRdU3"$b"b$!7 BBD 7^ $Y"X7R^NBB r2r2r!!r&         i   i   i   i   i   i i i    rZ   rP   r\   	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿ      gc            
          e Zd Zd Zej
                  j                  dd      ej
                  j                  dd ej                  ddd      g      d	               Z	ej
                  j                  d
 e
       dddg      d        Zd Zd Zd Zej
                  j                  de      d        Zej
                  j                  ddddgf      ej
                  j                  dd      d               Zd Zd Zd Zy)TestChandrupatlaMinimizec                     t        ||      }|j                  d||z
  dz  z         d|j                  z  dz  z  }|j                  ||j                        d   S )Nrw   rI   g      ?dtyper$   )r   rS   piasarrayr|   )selfrL   locr   r   s        r"   r!   zTestChandrupatlaMinimize.f   sY    Q$vvdaeaZ'((AbeeGc>9zz#QWWz-b11r&   r|   float32float64r   333333?g?rs   c                    ddd   }t              fddD        }j                  |      }j                  j                  t        j                  j                  d             |j                        }t        | j                  g|d|fi}t        |j                  ||	       t        |j                  |       y )
Ng{Gzt?gƠ>r   c              3   D   K   | ]  }j                  |         yw)r{   N)r~   ).0xir|   r   s     r"   	<genexpr>z6TestChandrupatlaMinimize.test_basic.<locals>.<genexpr>   s     D22::b:.Ds    r   rO   r{   r   argsrtol)getattrr~   broadcast_tor   normpdfr   _chandrupatla_minimizer!   r   rL   r   r:   )r   r   r   r|   r   r1   r:   r   s     ``    r"   
test_basicz#TestChandrupatlaMinimize.test_basic   s    
  D1%8E"DDjjEj*oobjj%**..*;);5jI399U$TVVCgCSFCs.%r&   r   rr   r[      r[   rI   rI   c           
          |r"|j                  ddd      j                  |      n|j                  d      }|f}|j                  d      |j                  d      |j                  d      ft        |       fd       } fd	d
_        t        gd|i} ||      }g d}|D ]g  }	|j                  |D 
cg c]  }
t        |
|	       c}
      }t        t        ||	            }t        ||       t        ||	      j                  |k(  rgJ  t        |j                    j                  |j                  g|        t        |j                    j                  |j                  g|        t        |j                     j                  |j"                  g|        t        |j$                    j                  |j&                  g|        |j)                  |j*                        j                  k(  sJ |j)                  |j,                        j                  dz
  k(  sJ |j/                  |j0                  j2                  d      sJ |j/                  |j4                  j2                  d      sJ |j/                  |j*                  j2                  d      sJ |j/                  |j,                  j2                  d      sJ y c c}
w )Nrv   r   rr   r                 rW   c                 8    t        j                  gd| fiS )Nr   )r   r!   )
loc_singler1   r   s    r"   chandrupatla_singlezHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_single   s    )$&&O7O*OOr&   c                  R    xj                   dz  c_          j                  | i |S NrG   f_evalsr!   r   r@   r!   r   s     r"   r!   z6TestChandrupatlaMinimize.test_vectorization.<locals>.f   &    IINI4664*6**r&   r   r   )rL   r:   successstatusnfevnitr2   r7   r3   r5   r8   r6   r[   boolintegral)linspacereshaper~   r'   r   r   stackr   r	   r   r   r:   r!   rL   r5   r2   r8   r7   r6   r3   maxr   r   isdtyper   r|   r   )r   r   r   r   r   r   r   refsattrsattrrefref_attrres_attrr1   r!   s   `            @@r"   test_vectorizationz+TestChandrupatlaMinimize.test_vectorization   sP    >Cbkk%r*2259

SVv**S/2::b>2::b>A	B	P 
	P	+ 	$Q<<t<"3'5 	5Dxxt Dd!3 DEHT 23HHh/3%++u444		5 	!5!56svv 5 56svv 5 56svv 5 56vvchh199,,,vvcgg!))a-///zz#++++V444zz#****J777zz#((..*555zz#''--444 !Es   >K
c                 *   fd}j                  dj                        f}j                  dgdz  j                        j                  dgdz  j                        j                  t        j
                  gdz  j                        f}t        |g||dd}j                  t        j                  t        j                  t        j                  t        j                  gj                        }t        |j                  |       y )Nc                     d d d fdg}g }t        t        |            D ]:  }| |df   }t        t        |      |         }|j	                   ||   |             < j                  |      S )Nc                     | dz
  dz  S )N      @rI   r$   rK   s    r"   <lambda>z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>      CA~ r&   c                     | dz
  S Nrs   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>  
    q2v r&   c                     | dz
  dz  S )Nr   r   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>  r   r&   c                 Z    j                  | j                  j                              S r0   	full_liker~   nanrT   s    r"   r   z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>  s    r||Arzz"&&/AB r&   .)r   r
   intr	   r   r   )xsjsfuncsr   r   rL   jr   s          r"   r!   z.TestChandrupatlaMinimize.test_flags.<locals>.f   s{    -%-BDE C72;' (q#vJQ(

858A;'( 88C= r&   r   r{   r   rI   rs   r   rb   )arangeint64r~   r   npr}   r   eim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRint32r   r   )r   r   r!   r   r1   r   	ref_flagss    `     r"   
test_flagsz#TestChandrupatlaMinimize.test_flags   s    
	! 		!288	,.::qc!e2:::6::qc!e2:::6::ruugairzz::< %QHHtRHJJ # 079xx  A	

I.r&   c                    t         j                  j                  d      }|j                  |j                  d            }|j                  d|j                        |j                  d      |j                  d      f}|f}t        |dddd      }|j                         }d	|d
<   t        | j                  g|i |}|j                  |j                  |j                  z
        }	|j                  d|d
   z  |j                        }
t        |	|j                  d|
|j                               d|d
<   t        | j                  g|i |}|j                  |j                  |j                  z
        }|j                  d|d
   z  |j                        }
t        ||j                  d|
|j                               t        ||	       |j                         }d	|d<   t        | j                  g|i |}|j                  |j                  |j                  z
        }	|j                  d|d   z  |j                  |j                        z  |j                        }
t        |	|
       d|d<   t        | j                  g|i |}|j                  |j                  |j                  z
        }|j                  d|d   z  |j                  |j                        z  |j                        }
t        ||
       t        ||	       |j                         }d	|d<   t        | j                  g|i |}|j                  |j                   d|j"                  z  z
  |j$                  z         }|j                  d|d   z  |j                        }
t        ||j                  d|
|j                               d|d<   t        | j                  g|i |}|j                  |j                   d|j"                  z  z
  |j$                  z         }|j                  d|d   z  |j                        }
t        ||j                  d|
|j                               t        ||       |j                         }d	|d<   t        | j                  g|i |}|j                  |j                   d|j"                  z  z
  |j$                  z         }|j                  d|d   z  |j                  |j&                        z  |j                        }
t        ||
       d|d<   t        | j                  g|i |}|j                  |j                   d|j"                  z  z
  |j$                  z         }|j                  d|d   z  t        |j&                        z  |j                        }
t        ||
       t        ||       y )N   FA92 r[   sizer   r{   r   rO   )r   r,   r-   r*   r+   MbP?r,   r   r[   ư>r-   r*   rI   r+   )r   randomdefault_rngr~   r   dictcopyr   r!   absr3   r2   r|   r   fullrL   r5   r8   r6   r:   )r   r   rngpr1   r   kwargs0r@   res1j1tolres2j2h1h2s                  r"   test_convergencez)TestChandrupatlaMinimize.test_convergence  s   ii##$78JJszzqz)*::b

:3RZZ]BJJqMRtD!1Ew%dffAwA&AVVDGGdgg%&jj6'?*!''j:r2774AGG7<=w%dffAwA&AVVDGGdgg%&jj6'?*!''j:r2774AGG7<=r2w%dffAwA&AVVDGGdgg%&jj6'?*266$&&>9jIr3w%dffAwA&AVVDGGdgg%&jj6'?*266$&&>9jIr3r2w%dffAwA&AVVDGGa$''k)DGG34jj6'?*!''j:r2774AGG7<=w%dffAwA&AVVDGGa$''k)DGG34jj6'?*!''j:r2774AGG7<=r2w%dffAwA&AVVDGGa$''k)DGG34jj6'?*266$((+;;177jKr3w%dffAwA&AVVDGGa$''k)DGG34jj6'?*3txx=8jHr3r2r&   c                     j                  d      j                  d      j                  d      j                  d      fdt         j                  gfd}j                  |j                        rJ j                  |j                  dz   k(        sJ j                  |j                  k(        sJ  fdj                  _	        j                  _
        d_        d _        t         j                  gfd	}|j                         D ][  }|d
k(  r1||   t        j                  k(  sJ ||   t        j                   k(  r7J ||   j                  |   cxk(  r
||   k(  rXJ  J  y )N~,?r   r   rO   r   r[   c                    xj                   dz  c_         | _        t        | d      sJ j                   dk(  r(| j                  | j                  | j
                  fk(  s~J | j                  j                  k(  | j
                  j
                  k7  z  }| j                  j                  k7  | j
                  j
                  k(  z  }j                  ||z        sJ | j                  _        | j
                  _        | j                  t        j                  k(  sJ t        j                  | j                        | j                         t        j                  | j                        | j                         t        j                  | j
                        | j                         t        j                  | j                        | j                          j                   k(  rt"        y NrG   rL   r   )iterr   hasattrr2   r7   r3   allr   r   _EINPROGRESSr   r!   r5   r8   r6   rL   r:   StopIteration)	r   
changed_xr
changed_xlr1   r.   r   rb   r   r   s	      r"   r.   z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callback^  sm   MMQMHL3$$$}}!/7:::!ff3(++8MN
!ff3(++8MN
vvj:5666&&HK&&HK::!1!1111DFF3663/8DFF3663/8DFF3663/8DFF355#.8}}'## (r&   rf   r   r.   r   )r~   r   r!   anyr   r   r   r   r   r2   r3   r   r   keysr   r   
_ECALLBACK)	r   r   r   r   rB   r1   r.   r   rb   s	   ``   @@@@r"   test_maxiter_callbackz.TestChandrupatlaMinimize.test_maxiter_callbackR  sv   jj"::b>2::a="**Q-@$TVV 6g 6SF-4666#++&&&vvchh'!)+,,,vvcgg()))	$ 	$, ffff%dff 9w 9cV/79
 88: 	BCh3x3==000CyCNN222CyHLL$5ASAAAAA	Br&   casec                 X   |\  }}}d}||z   }t        |||      \  }}}}	}
}d}d}d}d}|j                  |      |j                  |      |j                  ||j                        f}t        |g|||||d}t	        |j
                  |j                  ||j                               y )Ng?g-C6?r   gؗҜ<r{   )r,   r*   r-   r+   )re   r~   r   r   r   r   r   )r   r   r   r<   r_   r   rc   r`   rd   rM   rQ   rU   r,   r*   r-   r+   r1   r   s                     r"   test_nit_expectedz*TestChandrupatlaMinimize.test_nit_expected  s    
 b# $Y!1$B!?BBB **R."**R."**Rrzz*2RR$T LG L5+0ULCrxx!@Ar&   g?gffffff?float16r   r   c           	         t              j                  |      }j                  d      j                  d      j                  d      f}fd}t        |g|d|fi}|j                  j                  k(  sJ t        |j                  |t        j                  j                        j                               y )Nr{   rG   rO   c                 V    | j                   k(  sJ j                  | |z
  dz        S NrI   )r|   astype)rL   r   r|   r   s     r"   r!   z.TestChandrupatlaMinimize.test_dtype.<locals>.f  s.    77e###99a#g\511r&   r   r   )
r   r~   r   rL   r|   r   r   sqrtfinfoeps)r   r   r|   r   r1   r!   r   s     ``   r"   
test_dtypez#TestChandrupatlaMinimize.test_dtype  s     E"jjEj*::b:.::au:-::au:-/	2 %Q>>v>uu{{e###s288E?3F3F)GHr&   c                    d}|j                  d      |j                  d      |j                  d      f}t        j                  t        |      5  t	        d g|  d d d        d}|j                  d      |j                  d      |j                  d      f}t        j                  t        |      5  t	        d g|  d d d        d	}|j                  d
dg      |j                  ddg      |j                  g d      f}t        j                  t        t
        f|      5  t	        d g|  d d d        d}|j                  ddg      |j                  ddg      |j                  ddg      f}t        j                  t        |      5  t	        d g|  d d d        d}|j                  d      |j                  d      |j                  d      f}t        j                  t        |      5  t	        d g|ddi d d d        t        j                  t        |      5  t	        d g|d|j                  i d d d        t        j                  t        |      5  t	        d g|ddi d d d        t        j                  t        |      5  t	        d g|d|j                  i d d d        d}t        j                  t        |      5  t	        d g|ddi d d d        t        j                  t        |      5  t	        d  g|ddi d d d        d!}t        j                  t        |      5  t	        d" g|d#d$i d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)%N`func` must be callable.rj   r   r   match3Abscissae and function output must be real numbers.            ?c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>      Q r&   z...be broadcast...rh   r  r[   r   rO   c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   z:The shape of the array returned by `func` must be the samerO   c                     | d   | d   | d   gS )N)r   .)rG   .r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  s    ai6AfI-N r&   (Tolerances must be non-negative scalars.c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   r,   rf   c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   r-   c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   r*   ekkic                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   r+   )`maxiter` must be a non-negative integer.c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   rb         ?c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   `callback` must be callable.c                     | S r0   r$   rK   s    r"   r   z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>  r  r&   r.   	shrubbery)r~   pytestraises
ValueErrorr   RuntimeErrorr   )r   r   messager1   s       r"   test_input_validationz.TestChandrupatlaMinimize.test_input_validation  sm    -**R."**Q-A>]]:W5 	3"42'2	3 H**W%rzz!}bjjmC]]:W5 	:";99	: '**b"X&

Aq6(:BJJy<QQ]]J5WE 	:";99	: O**b"X&

Aq6(:BJJ1v<NN]]:W5 	-"#N -$+-	- =**R."**Q-A>]]:W5 	D";CCC	D]]:W5 	H";GGG	H]]:W5 	H";GGG	H]]:W5 	H";GGG	H >]]:W5 	G";FF#F	G]]:W5 	F";EE"E	F 1]]:W5 	P";OO;O	P 	PM	3 	3
	: 	:	: 	:
	- 	-	D 	D	H 	H	H 	H	H 	H	G 	G	F 	F	P 	Ps   M4M,%M9N5N)N 'N-N:OOOM),M69NNN N*-N7:OOOO(c                    |j                  ddd      d d |j                  f   }|j                  t        t	        g d                  j
                  }t        | j                  g|d|fi}|j                  t        j                  |j                  |      |j                  | j                  ||      k(  z        sJ |j                  d d df   }t        |j                  |j                  j
                  |      ddi y )	Nrf   rG   rP   r   r   r   r   V瞯<)r   newaxisr~   listr   Tr   r!   r   xpxiscloserL   r:   r   broadcast_arrays)r   r   r   bracketsr   r   s         r"   test_bracket_orderz+TestChandrupatlaMinimize.test_bracket_order  s    kk"a#ArzzM2::d<
#;<=??$TVVDhDcVDvvckk#%%-DFF3<L1LMNNNeeAqDk,,SUUWWc:GGr&   c                 R   fd}j                  d      j                  d      j                  d      f}t        j                  d      5  t        |g|ddd}d d d        j                  sJ t        |j                  j                  d      d	
       t        |j                  j                  d      d       d }j                  d      j                  d      j                  d      f}t        |g| }|j                  sJ t        |j                  j                  d             d }j                  d      j                  d      j                  d      f}t        |g|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 }j                  d      j                  d      j                  d      f}j                  d      }t        |g|d|fi}t        |j                  |       fd}j                  d      j                  d      j                  j                        f}t        |g|ddddd}|j                  sJ |j                  |j                  cxk  r|j                  k  sJ  J  ||j                         ||j                        cxk(  r ||j                        k(  sJ  J y # 1 sw Y   xY w)Nc                 P    j                  | j                  d      sJ | dz
  dz  S )Nreal floatingrG   rI   r   r|   rT   s    r"   r!   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s)    ::agg777EA:r&   r   rZ   ignoreinvalid)r*   r+         ?r   r   r   gN~hatolc                     | dz
  dz  S NrG   rI   r$   rK   s    r"   r!   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f      aC!8Or&   rG   c                     | dz
  dz  S rA  r$   rK   s    r"   r!   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  rB  r&   r  g?rO   rb   r[   rh   c                     | |z
  dz  dz
  S )NrI   rG   r$   rL   cs     r"   r!   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    aC!8a<r&   rf   UUUUUU?r   c                 (    j                  |        S r0   )sinrT   s    r"   r!   z6TestChandrupatlaMinimize.test_special_cases.<locals>.f  s    FF1I:r&   r,   r-   r*   r+   )r~   r   errstater   r   r   rL   r:   r   r2   r3   r   r   r   r}   r7   )r   r   r!   r1   r   rF  s    `    r"   test_special_casesz+TestChandrupatlaMinimize.test_special_cases  s   	 **R."**Q-A>[[* 	H(GWGAQGC	H{{{rzz"~D9Bf=	 **Q-A

1=$Q11{{{rzz"~.	 **R."**S/2::a=@$Q<<!<vv(svv((vww!||xx1}}zzRuu||	  **R."**Q-A>JJsO$Q<<t<q!	 **Q-A

2550AA$QUU!STU{{{vv''''''yAcffI236622222]	H 	Hs   LL&N)__name__
__module____qualname__r!   r%  markparametrizer   r   r   tupler   r   r   r   casesr  r  r*  r4  rL  r$   r&   r"   ry   ry      s#   2
 [[W&<=[[US+"++eT2*F$GH& I >& [[Wuwvy&IJ%5 K%5P/2:x2Bh [[VU+B ,B, [[UTD#;$78[[W&GHI I 9I",P\H73r&   ry   c            	          e Zd Zd Zej
                  j                  dd ej                  ddd      g      d        Z	ej
                  j                  d e
       d	d
dg      d        Zd Zd Zd Zej
                  j                  de      d        Zej
                  j                  ddddgf      ej
                  j                  dd      d               Zd Zd Zy)TestFindRootc                 2    t        j                  |      |z
  S r0   )r   ndtr)r   qr   s      r"   r!   zTestFindRoot.f$  s    ||A""r&   r   r   rv   r   rs   c                 b   |j                  d      |j                  d      }}t        | j                  ||f|j                  |      f      }|j                  t        j                         j                  |      |j                  |      j                        }t        |j                  |       y )Nr   rW   r   r{   )	r~   r   r!   r   r   ppfr|   r   rL   )r   r   r   abr   r   s          r"   r   zTestFindRoot.test_basic'  s}     zz#

21Abjjm-=>jj))!,BJJqM4G4GjHs#r&   r   r   r   r   c           
          |r&t        j                  ddd      j                  |      nt        j                  d      }|j	                  |      }|f}|j
                  }t         j                   fd       } fdd_        |j	                  d|j                  	      |j	                  d
|j                  	      f}t        ||      }	 ||      j                         }
|
D cg c]  }|j                   }}|j                  |j	                  ||	      |      }t        |	j                  |       |
D cg c]  }|j                   }}|j                  |j	                  ||	      |      }t        |	j                  |d       t        |	j                    j                  |	j                  g|        |
D cg c]  }t        |j                          }}|j                  |j	                  ||j                  	      |      }t        |	j                   |       |
D cg c]  }|j"                   }}|j                  |j	                  ||j$                  	      |      }t        |	j"                  |       |
D cg c]  }|j&                   }}|j                  |j	                  ||j$                  	      |      }t)        |      r@t        |	j&                  |       |j+                  |	j&                        j                  k(  sBJ |	j&                  j,                  |k(  sJ |	j&                  j
                  |j$                  k(  sJ |
D cg c]  }|j.                   }}|j                  |j	                  ||j$                  	      |      }t)        |      rCt        |	j.                  |       |j+                  |	j.                        j                  dz
  k(  sBJ |	j.                  j,                  |k(  sJ |	j.                  j
                  |j$                  k(  sJ |
D cg c]  }|j0                  d    }}|j                  |j	                  ||	      |      }t        |	j0                  d   |       |
D cg c]  }|j0                  d    }}|j                  |j	                  ||	      |      }t        |	j0                  d   |       t3        |	j0                  d   |	j0                  d          |j5                  |	j                        }|j7                  |	j                  |   |	j0                  d   |   k(  |	j                  |   |	j0                  d   |   k(  z        sJ t)        |      rdnd}|
D cg c]  }|j8                  d    }}|j                  |j	                  ||	      |      }t        |	j8                  d   ||       t        |	j8                  d     j                  |	j0                  d   g|        |
D cg c]  }|j8                  d    }}|j                  |j	                  ||	      |      }t        |	j8                  d   ||       t        |	j8                  d     j                  |	j0                  d   g|        |j7                  |j;                  |	j                  |         |j=                  |j;                  |	j8                  d   |         |j;                  |	j8                  d   |               k(        sJ y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nrv   r   rr   r   c                 6    t        j                  d| f      S )N)r   rO   rZ  )r   r!   )r   r   s    r"   find_root_singlez9TestFindRoot.test_vectorization.<locals>.find_root_single9  s    TVVWA488r&   c                  R    xj                   dz  c_          j                  | i |S r   r   r   s     r"   r!   z*TestFindRoot.test_vectorization.<locals>.f=  r   r&   r   r   r{   rW   rZ  r,  r>  rI   rG   g&.>)r   r   r   r   r~   r|   	vectorizer   r   ravelrL   r   r9   r   r!   r   r   r   r   r   r   r   r   r   r1   r   isfiniter   r4   r   minimum)r   r   r   r   p_xpargs_xpr|   r`  r1   r   r   r   ref_xref_fref_success
ref_statusref_nfevref_nitref_xlref_xrfiniter?  ref_flref_frr!   s   `                       @r"   r   zTestFindRoot.test_vectorization/  s    =BR[[b)11%8**S/ 	
zz!}'

		9 
	9	+ 	**S

*3RZZ"**Z5UU71"((*"&'3''

2::e5:95Au%$()S))

2::e5:95AU3!8!89489StCKK(99jjKrww!GO[1,01Scjj1
1ZZ

:RXX
 FN


J/(,-CHH--::bjjjBEJB<CHHh/66#((#qyy00088>>U***88>>RXX---&*+s377++**RZZrxxZ@%HB<CGGW-66#''?aiik11177==E)))77==BHH,,,,01S#++a.11BJJvUJ;UCA/,01S#++a.11BJJvUJ;UCA/s{{1~s{{1~6SUU#vvsuuV}Av(>>v#++a.*@@B C 	C C !u$.23s#--"33BJJvUJ;UCa(&t<a(&$&&Q*J'*JK.23s#--"33BJJvUJ;UCa(&t<a(&$&&Q*J'*JKvvbffSWWV_-jja(8(@!A!#a(8(@!ACC D 	D D{ ( *
 : 2 . , 2 2 4
 4s<   '\9\>\##\(?\-\2$\7<\<:]]c                    fd}j                  dj                        f}j                  dgdz        j                  j                  gdz        }}t	        |||f|d      }j                  t
        j                  t
        j                  t
        j                  t
        j                  gj                        }t        |j                  |       y )Nc           	      J   |j                   j                  k(  sJ t              r=d d d fdg}t        | |      D cg c]  \  }} |t	        |         |       c}}S d d d fdg}t        | |      D cg c]  \  }} ||   |       c}}S c c}}w c c}}w )	Nc                     | dz
  S Nr   r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s
    1s7 r&   c                     | dz
  S r   r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s
    1r6 r&   c                     | dz
  dz  S N皙?r[   r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s    AGa< r&   c                 Z    j                  | j                  j                              S r0   r   rT   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s    2<<2::bff3E#F r&   c                     | dz
  S rv  r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s
    q3w r&   c                     | dz
  S r   r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  r   r&   c                     | dz
  dz  S ry  r$   rK   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  r   r&   c                     j                   S r0   )r   rT   s    r"   r   z4TestFindRoot.test_flags.<locals>.f.<locals>.<lambda>  s    rvv r&   )r|   r   r   zipr   )r   r   r   rL   r   r   s        r"   r!   z"TestFindRoot.test_flags.<locals>.f  s     88rxx'''r{*)/FH 69R[ATQc!fa(AA&%-%'E -0BK8DAqHE!HQK88 B 9s   B Br   r{   r   rI   r   )r   r   r~   r}   r   r   r   r   r   r   r   r   r   )r   r   r!   r   r\  r]  r   r   s    `      r"   r   zTestFindRoot.test_flags  s    	9$ 		!288	,.zz2$q&!2::ruugai#81Aq6a8JJ # # # 0 8:xx  A	 	

I.r&   c           	      	   t         j                  j                  d      }|j                  |j                  d            }|j                  d       |j                  d      f}|f}t	        |t	        dddd            }t        |      }d|d	   d
<   t        | j                  |fi |}t        |j                  d   |j                  d   z
  |j                  ||j                  d                   d|d	   d
<   t        | j                  |fi |}	t        |	j                  d   |	j                  d   z
  |j                  ||j                  d                   t        |	j                  d   |	j                  d   z
  |j                  d   |j                  d   z
         t        |      }d|d	   d<   t        | j                  |fi |}t        |j                  d   |j                  d   z
  d|j                  |j                        z         d|d	   d<   t        | j                  |fi |}	t        |	j                  d   |	j                  d   z
  d|j                  |	j                        z         t        |	j                  d   |	j                  d   z
  |j                  d   |j                  d   z
         t        |      }d|d	   d<   t        | j                  |fi |}t        |j                  |j                        |j                  ||j                  d                   d|d	   d<   t        | j                  |fi |}	t        |j                  |	j                        |j                  ||j                  d                   t        |j                  |	j                        |j                  |j                               t        |      }d|d	   d<   |\  }
}|j                  |j                   | j                  |
g|       |j                   | j                  |g|             }t        | j                  |fi |}t        |j                  |j                        d|z         d|d	   d<   t        | j                  |fi |}	t        |j                  |	j                        d|z         t        |j                  |	j                        |j                  |j                               y )Nr   r[   r   rW   r   rJ  r   r=   r   r=   r,   rG   r   r-   r*   r+   )r   r   r   r~   r   r   r   r!   r   r1   r   r   rL   r9   re  )r   r   r   r   r1   r   r   r@   r   r   r_   r`   f0s                r"   r   zTestFindRoot.test_convergence  s   ii##$78JJszzqz)*JJrN?BJJrN3tDT!ST-UV'"(,|W%3F3t||Aa8||Arzz$'78	:(,|W%3F3t||Aa8||Arzz$'78	:t||Aa8||Aa8	: '"(,|W%3F3t||Aa8$:OP(,|W%3F3t||Aa8bffTVVn,	.t||Aa8||Aa8	: '"(,|W%3F3rvvdhh'aD9I)JK(,|W%3F3rvvdhh'aD9I)JKrvvdhh')9:'"(,|W%BZZvtvvb0401266&$&&:Kd:K3LM3F3rvvdhh'b1(,|W%3F3rvvdhh'b1rvvdhh')9:r&   c                    	 j                  d      	j                  d      j                  d      fdfdd _        d _        t        	f      }j	                  |j
                        rJ j                  |j                  dz   k(        sJ j                  |j                  k(        sJ 	 fdd	_	        d _
        d d g_        t        	f
      }|j                         D ]  }|dk(  rqt        ||   j                  t        j                  j                                t        ||   j                  t        j"                  j                                y|dv r1t        ||   d   ||   d          t        ||   d   ||   d          |j%                  d      rt        ||   ||           y )Nr   r   rW   rO   c                 T    t        j                  |       |z
  }| _        |_        |S r0   )r   rW  rL   r9   )rX  r   r   r!   s      r"   r!   z-TestFindRoot.test_maxiter_callback.<locals>.f  s(    ,,q/A%CACAEJr&   r   rI   c                    xj                   dz  c_         | _        t        | d      sJ j                   dk(  r#| j                  d   | j                  d   fk(  sJ | j                  d   j                  d   k(  | j                  d   j                  d   k7  z  | j                  d   j                  d   k7  | j                  d   j                  d   k(  z  z  }j	                  |      sJ | j                  d   j                  d<   | j                  d   j                  d<   | j
                  t        j                  k(  sJ t        j                  | j                  d         | j                  d          t        j                  | j                  d         | j                  d          t        j                  | j                        | j                         j                   k(  rt        y r   )r   r   r   r1   r   r   r   r   r   r!   r4   rL   r9   r   )r   changedr1   r.   rb   r   r   r   s     r"   r.   z4TestFindRoot.test_maxiter_callback.<locals>.callback  s   MMQMHL3$$$}}!AA77BBB [[^x/?/?/BB"{{1~1A1A!1DDF"{{1~1A1A!1DD!$Q83C3CA3F!FHI vvg&"%++a.HQ"%++a.HQ::!1!1111DFF3;;q>15s}}Q7GHDFF3;;q>15s}}Q7GHDFF355!,cgg6}}'## (r&   rf   r   r   r{   >   r1   r4   r   rG   _)r~   rL   r9   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   r   
startswith)
r   r   r   r   rB   r1   r.   r!   rb   r   s
   ``   @@@@@r"   r   z"TestFindRoot.test_maxiter_callback  s   JJx ::c?BJJrN3	
 7!w?66#++&&&vvchh'!)+,,,vvcgg()))	$ 	$,  $<G1$B 88: 
	5ChC"**S]]"((**STS	2::cnnBHH:+UV00S	!c#hqk:S	!c#hqk:$S	3s84
	5r&   r   c                    |\  }}}}}|j                  |d   |j                        |j                  |d   |j                        f}|j                  ||j                        }t        ||t        dd            }t	        |j
                  |j                   ||      |j                        dd	
       t        |j                  |j                  ||j                               y )Nr   r{   rG   g|=gh㈵>)r-   r,   r=   g:0yE>gMb`?)r   r?  )	r~   r   r   r   r   r9   r   r   r   )	r   r   r   r!   r1   rootnfevalidr   s	            r"   r  zTestFindRoot.test_nit_expected  s    
 (,$7D&"
 ::gaj

:;::gaj

:;=zz$bjjz17t%t/LMAdG2::!F!	."**V288*"DEr&   r  gCl?gV-?r|   r  c                    t               }|rdk(  rt        j                  d       t        d       t        j                   d        fd}j	                  d      j	                  d      }}j	                  |      }t        |||f|fdd	i
      }	 t        |j                  |d	       y # t        $ r< |j                  j                  k(  sJ j                  |j                  dk(         Y y w xY w)Nr  z0`float16` dtype only supported for NumPy arrays.z does not support c                 T    | |z
  dz  }t              rj                  |      S |S )NrH   r{   )r   r~   )rL   r  r   r|   r   s      r"   r!   z"TestFindRoot.test_dtype.<locals>.f5  s0    t8"C|zz#Uz33Jr&   r  r{   r[   r,   r   r  r>  r   )r   r%  skipr   r~   r   r   rL   AssertionErrorr|   r   r9   )	r   r  r|   r   	not_numpyr!   r\  r]  r   s	     ``     r"   r  zTestFindRoot.test_dtype)  s     !$	)+KKJKE4(=KK2$089	 zz"Ez*BJJqJ,F1zz$ez,Aq6WdOL	!CEE4d3 	!55;;%'''FF377a< 	!s   (C ADDc                 b   d }d}t        j                  t        |      5  |j                  d      |j                  d      f}t	        d |       d d d        d}t        j                  t        |      5  |j                  d      |j                  d      f}t	        ||       d d d        d}t        j                  t        t
        f|      5  |j                  d	d
g      |j                  g d      f}t	        ||       d d d        d}t        j                  t        |      5  |j                  d
d
g      |j                  ddg      f}t	        d |       d d d        d}|j                  d      |j                  d      f}t        j                  t        |      5  t	        ||t        d             d d d        t        j                  t        |      5  t	        ||t        |j                               d d d        t        j                  t        |      5  t	        ||t        d             d d d        t        j                  t        |      5  t	        ||t        |j                               d d d        d}t        j                  t        |      5  t	        ||d       d d d        t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   @xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                     | S r0   r$   rK   s    r"   r<   z0TestFindRoot.test_input_validation.<locals>.funcG  s    Hr&   r  r  rj   r   r  r  z@(not be broadcast|Attempting to broadcast a dimension of length)rh   r  r  z,The shape of the array returned by `func`...rO   c                     | d   | d   | d   gS )Nr   rG   r$   rK   s    r"   r   z4TestFindRoot.test_input_validation.<locals>.<lambda>^  s    1qtQqT 2 r&   r  rf   )r,   r  )r-   r  )r*   )r+   r  r   rb   r"  r$  )r.   )r%  r&  r'  r~   r   r(  r   r   )r   r   r<   r)  r1   s        r"   r*  z"TestFindRoot.test_input_validationD  s   	 -]]:W5 	%jjnbjjm3GdG$	% H]]:W5 	%jj'A6GdG$	% U]]J5WE 	%jj"b*BJJy,AAGdG$	% A]]:W5 	=jj"b*BJJ1v,>>G2G<	= =**R."**Q-/]]:W5 	@dG2?	@]]:W5 	DdG2660BC	D]]:W5 	DdG60BC	D]]:W5 	DdG2660BC	D >]]:W5 	2dGS1	2]]:W5 	1dGR0	1 1]]:W5 	;dGk:	; 	;O	% 	%
	% 	%	% 	%
	= 	=	@ 	@	D 	D	D 	D	D 	D	2 	2	1 	1	; 	;s   /L&5/L33M '4M"M#M'$M4 #N(NNN%&L03L= M
MM$'M14M>N
NN"%N.c                  
   d }j                  g d      j                  g d      }}t        j                  dd      5  t        |||f      }d d d        j	                  j
                        sJ t        |j                  dd  j                  d|j                  d                fd	}t        |j                  d
      j                  d      f      }|j
                  sJ t        |j                  j                  d             d }j                  ddg      }t        |j                  d      j                  d      f|f      }t        |j
                  j                  ddg             t        |j                  j                  j                  dg             d }t        j                  d      5  j                  j                        }t        |||f      }d d d        |j
                  sJ t        |j                  j                  j                               d }j                  d      j                  d      }}t        |||fd      }t        |j
                  j                  d             t        |j                  j                  dj                               t        |j                  j                  dj                               t        |j                  j                  dj                               t        |j                   d   |       t        |j                   d   |       t        |j                  |       t        || | fd      }t        |j                  |        t        |||fd      }t        |j
                  j                  d             t        |j                  j                  dj                               t        |j                  j                  dj                               t        |j                  j                  dj                               t        |j                  j                  d             d }t        |j                  d      j                  d      fj                  d            }t        |j                  j                  d             y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                 &    d| z  dz   d|  dz   z  z
  S r   r$   rK   s    r"   r!   z*TestFindRoot.test_special_cases.<locals>.fy  s    q519qQBF|++r&   )rz  r   r   rz  )?r=  r  r=  r:  )divider<  rG   r   r   c                 P    j                  | j                  d      sJ | dz  dz
  S )Nr7     rG   r8  rT   s    r"   r!   z*TestFindRoot.test_special_cases.<locals>.f  s)    ::agg7777Q;r&   r9  rO   r=  c                     | dz  |z
  S r  r$   )rL   r  s     r"   r!   z*TestFindRoot.test_special_cases.<locals>.f  s    a4$;r&   rZ  FTc                     d| z  S r   r$   rK   s    r"   r!   z*TestFindRoot.test_special_cases.<locals>.f  s    Q3Jr&   r;  c                     | dz  dz
  S )Nr[   rG   r$   rK   s    r"   r!   z*TestFindRoot.test_special_cases.<locals>.f  s    a4!8Or&   g      rW   r  rh   r{   rI   r[   c                     || z  dz
  S r   r$   rE  s     r"   r!   z*TestFindRoot.test_special_cases.<locals>.f  s    Q37Nr&   rf   rG  )r~   r   rK  r   r   r   r   rL   r   r   r   infr   r   r   r   r1   )r   r   r!   r\  r]  r   r  r  s    `      r"   rL  zTestFindRoot.test_special_casesu  s   	, zz,-

;O0P1[[(; 	'A1v&C	' vvckk"""ab	2774q#:;	 BJJrNBJJqM:;{{{rzz"~.	 zz1a&!BJJqM2::a=9HRZZ%>?rzz2662,78	 [[* 	+**RVV$CASz*C	+ {{{rzz"&&12	 zz#

21Aq61-RZZ%67

BJJrJ$BCARXX!>?"**Qbhh*"?@A*A*q!QB8Q/r" Aq61-RZZ%56

BJJqJ$ABARXX!>?"**Qbhh*"?@rzz"~.	 BJJrNBJJqM:AOrzz#/I	' 	'>	+ 	+s   S&*S3&S03S=N)rM  rN  rO  r!   r%  rP  rQ  r   r   r   rR  r   r   r   r   r   r  r  r*  rL  r$   r&   r"   rU  rU  !  s   # [[S3E4(D"EF$ G$ [[Wuwvy&IJUD KUDn/>1;f;5z [[V%89F :F$ [[VeeU^%<=[[W&GH! I >!2/;bM0r&   rU  ).r   r%  numpyr   r   r   scipyr   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy._lib.array_api_extraarray_api_extrar0  scipy._lib._array_apir   r   r   r	   r
   r   scipy._lib._array_api_no_0dr   r   r   scipy.optimize.elementwiser   r   scipy.optimize._tstutilsr   	itertoolsr   r'   rD   r   rM   rQ   rU   rX   r]   re   rS  ry   rU  r$   r&   r"   <module>r     s\         6 6 ( (? ?9 9 ? 8 ":"!J ,L9 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 < `3 `3 !`3F 9`0 `0 `0r&   