o
    ?Hhl                  	   @   s  d dl Z d dlZd dlZd dlmZmZ d dlm  m	Z
 d dlmZ d dl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	d
lmZ dd Z dd Z!e!eZ"e!eZ#dd Z$dd Z%dd Z&dd Z'dd Z(d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 d0fe%d"d.fe%d$d.fe%d&d1fe%d(dfe%d*dfe%d+d2fe%d,dfe&ddfe&ddfe&ddfe&d d3fe&d"d4fe&d$d2fe&d&d!fe&d(d5fe&d*d5fe&d+d%fe&d,d%fe'd6d1fe'd7dfe'd8dfe'd9dfe'd:dfe'd;d1fe'd<d1fe'd=d1fe'd>d3fe'd?d3fe'd@d3fe(d6d/fe(d7d0fe(d8d.fe(d9d3fe(d:d1fe(d;d.fe(d<d0fe(d=d0fe(d>d1fe(d?d1fe(d@d.fZ*eej+,dAej+j-dBdCdDej+j-dEdFdDG dGdH dHZ.eej+,dAej+j-dEdFdDej+j-dBdCdDej+j-dIdJdDG dKdL dLeZ/dS )M    N)statsspecial)array_api_compatible)array_namespaceis_cupyis_numpyxp_ravelxp_size)xp_assert_closexp_assert_equalxp_assert_less)find_minimum	find_root)_CHANDRUPATLA_TESTS)permutations   )TestScalarRootFindersc                        fdd}|S )Nc                    s    fdd}|S )Nc                     sX   | d j }fdd| D } g }tt|D ]  fdd| D }||  q|S )Nr   c                    s   g | ]}t | d qS )xp)r   .0	arg_arrayr    f/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_chandrupatla.py
<listcomp>   s    zB_vectorize.<locals>.decorator.<locals>.wrapped.<locals>.<listcomp>c                    s   g | ]}|  qS r   r   r   ir   r   r          )shaperangemathprodappend)
arg_arraysr   resarg_scalars)fr   r   r   wrapped   s   
z._vectorize.<locals>.decorator.<locals>.wrappedr   )r'   r(   r   r'   r   	decorator   s   	z_vectorize.<locals>.decoratorr   )r   r*   r   r   r   
_vectorize   s   r+   c                    r   )Nc                    s   h d}fdd|D } dd  t r fdd}n }| |f||d}tkr@|j\|_|_|j\|_|_n|j\|_|_	|_|j\|_|_
|_|j|_|`|`|`|S )N>   fatolfrtolxatolxrtolc                    s    i | ]}| v r|  |qS r   )pop)r   key)kwargsr   r   
<dictcomp>4        zE_wrap_chandrupatla.<locals>._chandrupatla_wrapper.<locals>.<dictcomp>callbackc                    sf   t kr| j\| _| _| j\| _| _n| j\| _| _| _| j\| _| _| _| j	| _
| `| `| `	 | S N)r   bracketxlxr	f_bracketflfrxmfmf_xfun)r%   )	_callbackfuncr   r   r5   7   s   zC_wrap_chandrupatla.<locals>._chandrupatla_wrapper.<locals>.callback)
tolerancesr5   )r0   callabler   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   )r'   r7   r2   tol_keysrC   r5   r%   rB   )rA   r2   r   _chandrupatla_wrapper1   s"   z1_wrap_chandrupatla.<locals>._chandrupatla_wrapperr   )rB   rG   r   rF   r   _wrap_chandrupatla0   s   !rH   c                 C   s0   dd| d  d  d| d   dd|  d   S )Nd   r         @          @r   xr   r   r   f1Y   s   0rO   c                 C   s   d| d d  S )N   rL      r   rM   r   r   r   f2]      rR   c                 C   s   t | }|| d|   S )NrP   )r   exp)rN   r   r   r   r   f3a   s   rU   c                 C   s    | d d| d   d|   d S )N      @rP   rJ   g      4@r   rM   r   r   r   f4f   s    rW   c                 C   s$   d| d  d| d   d|   d S )N      rK      r   rM   r   r   r   f5j   s   $r[   c                 C   s   d}d}| |}| |}|| }||kr||||| fn|||||f\}}}}}t |D ]}||9 }|| }	| |	}
|
|k rI||	||
f\}}}}q, |||	|||
fS )Ngw?rI   )r    )rB   x1x2phimaxiterrO   rR   stepr   x3rU   r   r   r   _bracket_minimumn   s    rb         i   i   i   i   i   i i i    rX   rQ   rZ   	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿ      gskip_xp_backendsz	jax.numpyz*JAX arrays do not support item assignment.)reasonarray_api_strictz)Currently uses fancy indexing assignment.c                
   @   s   e Zd Zdd Zejddejddeddd	gd
d Z	ejde
 dddgdd Zdd Zdd Zdd Zejdedd Zejddddgfejdddd Zd d! Zd"d# Zd$d% Zd&S )'TestChandrupatlaMinimizec                 C   sD   t ||}|d|| d   d|j d  }|j||jdd S )Nrt   rK   g      ?dtyper   )r   rT   piasarrayrz   )selfrN   locr   r%   r   r   r   r'      s   
&zTestChandrupatlaMinimize.frz   float32float64r~   333333?g?rp   c                    s   ddd  }t    fdddD }j| d}jtjd  d|j}t| jg|R d	|fi}t	|j
||d
 t|j| d S )Ng{Gzt?gƠ>r   c                 3   s    | ]
}j | d V  qdS )ry   N)r|   )r   xirz   r   r   r   	<genexpr>   s    z6TestChandrupatlaMinimize.test_basic.<locals>.<genexpr>r   rP   ry   r   argsrtol)getattrr|   broadcast_tor   normpdfr   _chandrupatla_minimizer'   r
   rN   r   r@   )r}   r~   r   rz   r   r7   r@   r%   r   r   r   
test_basic   s   
"z#TestChandrupatlaMinimize.test_basicr   ro   rY      rY   rK   rK   c                    s  |r| ddd|n|d}|f}|d|d|dft|}t|fdd	}fd
dd_tgR d|i}||}g d}	|	D ]$ | fdd|D }
tt	| }t
||
 t	| j|kstJ qPt
|jj|jg|R   t
|jj|jg|R   t
|jj|jg|R   t
|jj|jg|R   ||jjksJ ||jjd ksJ ||jjdsJ ||jjdsJ ||jjdsJ ||jjdsJ d S )Nrs   r   ro   r                 rV   c                    s   t jg R d| fiS )Nr   )r   r'   )
loc_single)r7   r}   r   r   chandrupatla_single   s   zHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_singlec                          j d7  _ j| i |S Nr   f_evalsr'   r   r2   r'   r}   r   r   r'         z6TestChandrupatlaMinimize.test_vectorization.<locals>.fr   r   )rN   r@   successstatusnfevnitr8   r=   r9   r;   r>   r<   c                    s   g | ]}t | qS r   )r   r   ref)attrr   r   r          z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>rY   boolintegral)linspacereshaper|   r   r+   r   r   stackr   r   r   r   r@   r'   rN   r;   r8   r>   r=   r<   r9   maxr   r   isdtyper   rz   r   )r}   r   r   r~   r   xp_testr   r%   refsattrsref_attrres_attrr   )r   r7   r'   r}   r   test_vectorization   s4   "
z+TestChandrupatlaMinimize.test_vectorizationc                    s    fdd} j d jdf} jdgd  jd jdgd  jd jtjgd  jdf}t|g|R |dd} jtjtj	tj
tjg jd}t|j| d S )	Nc                    sn   dd dd dd  fddg}g }t t|D ]}| |df }tt|| }||| | q |S )Nc                 S      | d d S )N      @rK   r   rM   r   r   r   <lambda>      z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>c                 S      | d S Nrp   r   rM   r   r   r   r         c                 S   r   )Nr   r   r   rM   r   r   r   r   	  r   c                         |   jS r6   	full_liker|   nanrM   r   r   r   r   
  r   .)r    r	   intr   r#   r   )xsjsfuncsr%   r   rN   jr   r   r   r'     s   

z.TestChandrupatlaMinimize.test_flags.<locals>.fr   ry   r   rK   rp   r   r_   )arangeint64r|   r   npr{   r   eim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRint32r   r   )r}   r   r'   r   r7   r%   	ref_flagsr   r   r   
test_flags  s   z#TestChandrupatlaMinimize.test_flagsc                 C   s  t jd}||jdd}|d|d|df}|f}t|ddddd}| }d|d	< t| jg|R i |}||j	|j
 }	|jd
|d	  |jd}
t|	|jd|
|jd d|d	< t| jg|R i |}||j	|j
 }|jd
|d	  |jd}
t||jd|
|jd t||	 | }d|d< t| jg|R i |}||j	|j
 }	|jd
|d  ||j |jd}
t|	|
 d|d< t| jg|R i |}||j	|j
 }|jd
|d  ||j |jd}
t||
 t||	 | }d|d< t| jg|R i |}||jd|j  |j }|jd|d  |jd}
t||jd|
|jd d|d< t| jg|R i |}||jd|j  |j }|jd|d  |jd}
t||jd|
|jd t|| | }d|d< t| jg|R i |}||jd|j  |j }|jd|d  ||j |jd}
t||
 d|d< t| jg|R i |}||jd|j  |j }|jd|d  t|j |jd}
t||
 t|| d S )N   FA92 rY   sizer   r   rP   r   r.   r/   r,   r-   MbP?r.   r   ry   rY   ư>r/   r,   rK   r-   )r   randomdefault_rngr|   dictcopyr   r'   absr9   r8   rz   r   fullrN   r;   r>   r<   r@   )r}   r   rngpr7   r   kwargs0r2   res1j1tolres2j2h1h2r   r   r   test_convergence  sj   
$
$


$
"
z)TestChandrupatlaMinimize.test_convergencec                    s:   d d d df dtjg R fd}|jr+J |jd ks7J |jksAJ  fddj_	j_
d	_d _tjg R fd
}| D ].}|dkr|| tjks{J || tjksJ ql|| j|   kr|| ksJ  J qld S )N~,?r   r   rP   r   rY   c                    s   j d7  _ | _t| dsJ j dkr#| j| j| jf ks"J n!| jjk| jjk@ }| jjk| jjk@ }||B sDJ | j_| j_| jtj	ksTJ t
| j| j t
| j| j t
| j| j t
| j| j j krtd S Nr   rN   r   )iterr%   hasattrr8   r=   r9   allr   r   _EINPROGRESSr   r'   r;   r>   r<   rN   r@   StopIteration)r%   
changed_xr
changed_xlr7   r5   r~   r_   r}   r   r   r   r5   d  s$   

z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callbackrc   r   r5   r   )r|   r   r'   anyr   r   r   r   r   r8   r9   r   r%   keysr   r   
_ECALLBACKr}   r   r%   r   r1   r   r   r   test_maxiter_callbackX  s.   
,z.TestChandrupatlaMinimize.test_maxiter_callbackcasec                 C   s   |\}}}d}|| }t |||\}}}}	}
}d}d}d}d}|||||j||jdf}t|g|R ||||d}t|j|j||jd d S )Ng?g-C6?r   gؗҜ<ry   )r.   r,   r/   r-   )rb   r|   r   r   r   r   r   )r}   r   r   rB   r\   r   r`   r]   ra   rO   rR   rU   r.   r,   r/   r-   r7   r%   r   r   r   test_nit_expected  s   
"z*TestChandrupatlaMinimize.test_nit_expectedg?gffffff?float16r   r   c                    s   t |  |j| d}|jd d|jd d|jd df}t| fdd}t|g|R d|fi}|jj ks?J t|j|t|	 j
d d S )	Nry   r   rP   c                    s"   | j  ksJ | | d  S NrK   )rz   astype)rN   r~   rz   r   r   r   r'     s   z.TestChandrupatlaMinimize.test_dtype.<locals>.fr   r   )r   r|   r   r   rN   rz   r
   r!   sqrtfinfoeps)r}   r~   rz   r   r7   r'   r%   r   r  r   
test_dtype  s   
"z#TestChandrupatlaMinimize.test_dtypec                 C   s  d}| d| d| df}tjt|d td g|R   W d    n1 s*w   Y  d}| d| d| df}tjt|d tdd	 g|R   W d    n1 s[w   Y  d
}| ddg| ddg| g df}tjttf|d tdd	 g|R   W d    n1 sw   Y  d}| ddg| ddg| ddgf}tjt|d tdd	 g|R   W d    n1 sw   Y  d}| d| d| df}tjt|d tdd	 g|R ddi W d    n1 sw   Y  tjt|d tdd	 g|R d|ji W d    n	1 s%w   Y  tjt|d tdd	 g|R ddi W d    n	1 sJw   Y  tjt|d tdd	 g|R d|ji W d    n	1 spw   Y  d}tjt|d tdd	 g|R dd i W d    n	1 sw   Y  tjt|d td!d	 g|R ddi W d    n	1 sw   Y  d"}tjt|d td#d	 g|R d$d%i W d    d S 1 sw   Y  d S )&N`func` must be callable.rg   r   r   match3Abscissae and function output must be real numbers.            ?c                 S      | S r6   r   rM   r   r   r   r         z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>z...be broadcast...re   r   rY   r   rP   c                 S   r  r6   r   rM   r   r   r   r     r  z:The shape of the array returned by `func` must be the samerP   c                 S      | d | d | d gS )N)r   .)r   .r   rM   r   r   r   r     r   (Tolerances must be non-negative scalars.c                 S   r  r6   r   rM   r   r   r   r     r  r.   rc   c                 S   r  r6   r   rM   r   r   r   r     r  r/   c                 S   r  r6   r   rM   r   r   r   r     r  r,   ekkic                 S   r  r6   r   rM   r   r   r   r     r  r-   )`maxiter` must be a non-negative integer.c                 S   r  r6   r   rM   r   r   r   r     r  r_         ?c                 S   r  r6   r   rM   r   r   r   r     r  `callback` must be callable.c                 S   r  r6   r   rM   r   r   r   r     r  r5   	shrubbery)r|   pytestraises
ValueErrorr   RuntimeErrorr   )r}   r   messager7   r   r   r   test_input_validation  s^   ((

$z.TestChandrupatlaMinimize.test_input_validationc                 C   s   t |d}|dddd d |jf }|ttg dj}t| jg|R d|fi}|	|
|j||j| ||kB sCJ |jd d df }t |}t||jj|dd	i d S )
N      ?rc   r   rQ   r   r   r   r   V瞯<)r   r|   r   newaxislistr   Tr   r'   r   iscloserN   r@   r
   broadcast_arrays)r}   r   r   r~   bracketsr%   r   r   r   r   test_bracket_order  s   *z+TestChandrupatlaMinimize.test_bracket_orderc                    s  t  dfdd} d d df}tjdd t|g|R ddd	}W d    n1 s8w   Y  |jsBJ t|j dd
d t|j ddd dd } d d df}t|g|R  }|jswJ t	|j d dd } d d df}t|g|R ddi}|j
sJ |j|k|jdksJ |jdksJ |jdksJ |jdksJ dd } d d df} d}t|g|R d|fi}t|j|  fdd} d d  jf}t|g|R ddddd}|jsJ |j
|j  k r%|jk s(J  J ||j
||j  kr>||jksAJ  J d S )Nr  c                    s     | jds	J | d d S )Nreal floatingr   rK   r   rz   rM   r   r   r   r'     s   z6TestChandrupatlaMinimize.test_special_cases.<locals>.fr   rX   ignoreinvalid)r,   r-   r   r   r   gN~hatolc                 S   r   Nr   rK   r   rM   r   r   r   r'        r   c                 S   r   r-  r   rM   r   r   r   r'     r.  r   g?rP   r_   rY   re   c                 S   s   | | d d S )NrK   r   r   rN   cr   r   r   r'     rS   rc   UUUUUU?r   c                    s     |  S r6   )sinrM   r   r   r   r'      r.  )r.   r/   r,   r-   )r   r|   r   errstater   r   r
   rN   r@   r   r8   r9   r   r   r   r{   r=   )r}   r   r'   r7   r%   r0  r   )r   r   r   test_special_cases  sB   


&6z+TestChandrupatlaMinimize.test_special_casesN)__name__
__module____qualname__r'   r  markparametrizer   r   r   tupler   r   r   r   casesr   r  r  r#  r4  r   r   r   r   rx      s$    
)<4
.rx   cupyzcupy/cupy#8391c                	   @   s   e Zd Zdd Zejddedddgdd	 Z	ejd
e
 dddgdd Zdd Zdd Zdd Zejdedd Zejddddgfejdddd Zd d! Zd"d# Zd$S )%TestChandrupatlac                 C   s   t || S r6   )r   ndtr)r}   qr   r   r   r   r'   5  s   zTestChandrupatla.fr   r   rs   r   rp   c                 C   s`   | d| d}}t| j||| |fd}|j t || |jd}t|j| d S )Nr   rV   r   ry   )	r|   _chandrupatla_rootr'   r   r   ppfrz   r
   rN   )r}   r   r   abr%   r   r   r   r   r   8  s    zTestChandrupatla.test_basicr   r   r   r   c              
      s
  |rt ddd|nt d}||}|f}|j}t|}t jfdd} fdd d	 _t	 |d
|d|d}	||
 }
dd |
D }||j||d|}t|	j| dd |
D }||j||d|}t|	j|dd t|	jj|	jg|R   dd |
D }||j||jd|}t|	j| dd |
D }||j||jd|}t|	j| dd |
D }||j||jd|}t|rt|	j| ||	j jksJ n|	jj|ksJ |	jj|jksJ dd |
D }||j||jd|}t|r t|	j| ||	j jd ksJ n|	jj|ks)J |	jj|jks3J dd |
D }||j||d|}t|	j| dd |
D }||j||d|}t|	j| t|	j|	j ||	j}||	j| |	j| k|	j| |	j| kB sJ t|rdnd}dd |
D }||j||d|}t|	j||d t|	jj|	jg|R   dd |
D }||j||d|}t|	j||d t|	jj|	jg|R   || |	j| |!| |	j| | |	j| ksJ d S )Nrs   r   ro   r   c                    s   t  jdd| fdS )Nr   rP   r@  )rA  r'   )r   )r}   r   r   r   K  s   z@TestChandrupatla.test_vectorization.<locals>.chandrupatla_singlec                     r   r   r   r   r   r   r   r'   O  r   z.TestChandrupatla.test_vectorization.<locals>.fr   r   rV   r@  c                 S      g | ]}|j qS r   rM   r   r   r   r   r   W      z7TestChandrupatla.test_vectorization.<locals>.<listcomp>ry   c                 S   rE  r   )r@   r   r   r   r   r   [  rF  r  r+  c                 S   s   g | ]}t |jqS r   )r   r   r   r   r   r   r   `  r   c                 S   rE  r   )r   r   r   r   r   r   d  rF  c                 S   rE  r   )r   r   r   r   r   r   h  rF  c                 S   rE  r   )r   r   r   r   r   r   q  rF  rK   c                 S   rE  r   )r8   r   r   r   r   r   z  rF  c                 S   rE  r   )r9   r   r   r   r   r   ~  rF  g&.>c                 S   rE  r   )r;   r   r   r   r   r     rF  c                 S   rE  r   )r<   r   r   r   r   r     rF  )"r   r   r   r   r|   rz   r   	vectorizer   rA  ravelr
   rN   r@   r   r'   r   r   r   r   r   r   r   r   r   r8   r9   r   isfiniter   r;   r<   r   minimum)r}   r   r   r   p_xpargs_xprz   r   r   r%   r   ref_xref_funref_successref_flagref_nfevref_nitref_xlref_xrfiniter,  ref_flref_frr   r   r   r   @  s   

z#TestChandrupatla.test_vectorizationc                    s    fdd} j d jdf} dgd   jgd }}t||||dd} jtjtjtjtj	g j
d}t|j| d S )Nc                    s   |j jksJ tr(dd dd dd fddg  fddt| |D S dd d	d d
d fddg  fddt| |D S )Nc                 S   r   Nr   r   rM   r   r   r   r     r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>c                 S   r   r   r   rM   r   r   r   r     r   c                 S   r   N皙?rY   r   rM   r   r   r   r     r   c                    r   r6   r   rM   r   r   r   r     r   c                    s    g | ]\}} t | |qS r   )r   r   rN   r   r   r   r   r     r4   z:TestChandrupatla.test_flags.<locals>.f.<locals>.<listcomp>c                 S   r   rX  r   rM   r   r   r   r     r   c                 S   r   r   r   rM   r   r   r   r     r   c                 S   r   rY  r   rM   r   r   r   r     r   c                    s    j S r6   )r   rM   r   r   r   r     s    c                    s   g | ]
\}} | |qS r   r   r[  r\  r   r   r     s    )rz   r   r   zip)r   r   r   r\  r   r'     s   

z&TestChandrupatla.test_flags.<locals>.fr   ry   r   rK   r   )r   r   r|   r{   rA  r   r   r   r   r   r   r   r   )r}   r   r'   r   rC  rD  r%   r   r   r   r   r     s   $zTestChandrupatla.test_flagsc                 C   s  t jd}||jdd}|d |df}|f}t|ddddd}| }d|d< t| jg|R i |}t|j	|j
 |||d d	|d< t| jg|R i |}	t|	j	|	j
 |||d	 t|	j	|	j
 |j	|j
  | }d|d
< t| jg|R i |}t|j	|j
 d||j  d	|d
< t| jg|R i |}	t|	j	|	j
 d	||	j  t|	j	|	j
 |j	|j
  | }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< |\}
}||| j|
g|R  || j|g|R  }t| jg|R i |}t||jd|  d	|d< t| jg|R i |}	t||	jd	|  t||	j||j d S )Nr   rY   r   rV   r   r   r   r.   r   r/   r,   r-   )r   r   r   r|   r   r   rA  r'   r   r9   r8   r   r   rN   r@   rJ  )r}   r   r   r   r7   r   r   r2   r   r   r\   r]   f0r   r   r   r     sN       4z!TestChandrupatla.test_convergencec                    sJ   d d df dfddd _d _tg R fd}|jr2J |jd ks>J |jksHJ  fd	d
d_	d _
d _d _tg R fd}| D ]2}|dkrt|| j tjjd t|| j tjjd qp|drqpt|| ||  qpd S )Nr   r   rV   rP   c                    s   t | | }|  _| _|S r6   )r   r>  rN   r@   )r?  r   r%   r)   r   r   r'     s   z1TestChandrupatla.test_maxiter_callback.<locals>.fr   rK   c                    s    j d7  _ | _t| dsJ j dkr!| j| jf ks J n| jjk| jjk@ | jjk| jjk@ B }|s@J | j_| j_| jtjksPJ t	
| j| j t	
| j| j t	
| j| j j krxtd S r   )r   r%   r   r8   r9   r   r   r   r   r   r'   r;   r<   rN   r@   r   )r%   changed)r7   r5   r_   r   r}   r   r   r   r5     s$   

z8TestChandrupatla.test_maxiter_callback.<locals>.callbackrc   r   r   ry   _)r|   rN   r@   rA  r   r   r   r   r   r   r%   r8   r9   r   r   r   r   r   r   
startswithr   r   )r7   r5   r'   r_   r   r}   r   r   r     s0   

z&TestChandrupatla.test_maxiter_callbackr   c           	      C   s   |\}}}}}|j |d |jd|j |d |jdf}|j ||jd}t|g|R ddd}t|j|j |||jdddd	 t|j|j ||jd d S )
Nr   ry   r   g|=gh㈵>)r/   r.   g:0yE>gMb`?)r   r,  )r|   r   rA  r
   r@   r   r   r   )	r}   r   r   r'   r7   rootnfevalidr%   r   r   r   r     s   z"TestChandrupatla.test_nit_expectedrb  gCl?gV-?rz   r   c           	         s   t  }|r dkrtd t d   d u r$t d    fdd}jd djd d}}j| d}t||||fd	d
}zt|j|d	d W d S  typ   |jj	 kseJ 
|jdk Y d S w )Nr   z0`float16` dtype only supported for NumPy arrays.z does not support c                    s&   | | d }t rj| dS |S )NrJ   ry   )r   r|   )rN   rb  r%   r   r   r   r'   =  s   z&TestChandrupatla.test_dtype.<locals>.fr   ry   rY   r   )r   r.   r+  r   )r   r  skipr   r|   rA  r
   rN   AssertionErrorrz   r   r@   )	r}   rb  rz   r   	not_numpyr'   rC  rD  r%   r   r   r   r  1  s    

zTestChandrupatla.test_dtypec                 C   s  dd }d}t jt|d |d|df}td g|R   W d    n1 s*w   Y  d}t jt|d |d|df}t|g|R   W d    n1 sUw   Y  d	}t jttf|d |d
dg|g df}t|g|R   W d    n1 sw   Y  d}t jt|d  |ddg|ddgf}tdd g|R   W d    n1 sw   Y  d}|d|df}t jt|d t|g|R ddi W d    n1 sw   Y  t jt|d t|g|R d|ji W d    n	1 s	w   Y  t jt|d t|g|R ddi W d    n	1 s,w   Y  t jt|d t|g|R d|ji W d    n	1 sPw   Y  d}t jt|d t|g|R ddi W d    n	1 suw   Y  t jt|d t|g|R ddi W d    n	1 sw   Y  d}t jt|d t|g|R ddi W d    d S 1 sw   Y  d S )Nc                 S   r  r6   r   rM   r   r   r   rB   O  s   z4TestChandrupatla.test_input_validation.<locals>.funcr  r  rg   r   r	  r
  z...not be broadcast...re   r   r  z,The shape of the array returned by `func`...rP   c                 S   r  )Nr   r   r   rM   r   r   r   r   e  r   z8TestChandrupatla.test_input_validation.<locals>.<lambda>r  r.   rc   r/   r,   r  r-   r  r_   r  r  r5   r  )r  r  r  r|   rA  r  r   )r}   r   rB   r  r7   r   r   r   r  L  s\   $z&TestChandrupatla.test_input_validationc                    s0  dd }| g d| g d}}tjddd t|||}W d    n1 s+w   Y  ||js8J t|jdd  |d|jd	  t	|  fd
d}t|| d| d}|jsdJ t|j| d dd }| d	dg}t|| d| d|fd}t
|j| ddg t
|j| |jdg dd }tjdd | |j}t|||}W d    n1 sw   Y  |jsJ t
|j| |j dd }| d| d}}t|||d	d}t
|j| d t
|j|j d|jd t
|j|j d	|jd t
|j|j d|jd t
|j| t
|j| t
|j| t|| | d	d}t
|j|  t|||dd}t
|j| d t
|j|j d	|jd t
|j|j d|jd t
|j|j d|jd t|j| d dd }t|| d| d| dd}t|j| d d S )Nc                 S   s   d|  d d|  d   S r   r   rM   r   r   r   r'     s   z.TestChandrupatla.test_special_cases.<locals>.f)rZ  r   r   rZ  )?r  rh  r  r(  )divider*  r   r   r   c                    s     | jds	J | d d S )Nr$     r   r%  rM   r&  r   r   r'     s   r'  rP   r  c                 S   s   | d | S r   r   )rN   rb  r   r   r   r'     r.  r@  FTc                 S   s   d|  S r   r   rM   r   r   r   r'     s   r)  c                 S   s   | d d S )NrY   r   r   rM   r   r   r   r'     r.  g      rV   )r_   re   ry   rK   rY   c                 S   s   ||  d S r   r   r/  r   r   r   r'     r.  rc   r1  )r|   r   r3  rA  r   r   r
   rN   r   r   r   r   infr   r   r   r   r8   r9   )r}   r   r'   rC  rD  r%   rb  rk  r   r&  r   r4  |  sZ   "

"z#TestChandrupatla.test_special_casesN)r5  r6  r7  r'   r  r8  r9  r   r   r   r:  r   r   r   r   r   r   r  r  r4  r   r   r   r   r=  +  s     


W.9
0r=  )0r!   r  numpyr   scipyr   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy.conftestr   scipy._lib._array_apir   r   r   r   r	   scipy._lib._array_api_no_0dr
   r   r   scipy.optimize.elementwiser   r   scipy.optimize._tstutilsr   	itertoolsr   
test_zerosr   r+   rH   rA  r   rO   rR   rU   rW   r[   rb   r;  r8  usefixturesru   rx   r=  r   r   r   r   <module>   s8   %	
 !"#$%&'()*+,-./01234567;
  j
