o
    il                  	   @   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   .0Z	arg_arrayr    `/home/kim/smarthome/.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)Z
arg_arraysr   resZ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xrtolxatolfrtolc                    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   r2   7   s   zC_wrap_chandrupatla.<locals>._chandrupatla_wrapper.<locals>.callback)
tolerancesr2   )r-   callabler   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   )r$   r4   r/   Ztol_keysr@   r2   r#   r?   )r>   r/   r   _chandrupatla_wrapper1   s"   z1_wrap_chandrupatla.<locals>._chandrupatla_wrapperr   )r?   rC   r   rB   r   _wrap_chandrupatla0   s   !rD   c                 C   s0   dd| d  d  d| d   dd|  d   S )Nd   r         @          @r   xr   r   r   f1Y   s   0rK   c                 C   s   d| d d  S )N   rH      r   rI   r   r   r   f2]      rN   c                 C   s   t | }|| d|   S )NrL   )r   exp)rJ   r   r   r   r   f3a   s   rQ   c                 C   s    | d d| d   d|   d S )N      @rL   rF   g      4@r   rI   r   r   r   f4f   s    rS   c                 C   s$   d| d  d| d   d|   d S )N      rG      r   rI   r   r   r   f5j   s   $rW   c                 C   s   d}d}| |}| |}|| }||kr||||| fn|||||f\}}}}}t |D ]}||9 }|| }	| |	}
|
|k rI||	||
f\}}}}q, |||	|||
fS )Ngw?rE   )r   )r?   x1x2phimaxiterrK   rN   stepr   x3rQ   r   r   r   _bracket_minimumn   s    r^         i   i   i   i   i   i i i    rT   rM   rV   	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿ      gskip_xp_backendsz	jax.numpyz*JAX arrays do not support item assignment.)reasonZ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 )Nrp   rG   g      ?dtyper   )r   rP   piasarrayru   )selfrJ   locr   r#   r   r   r   r$      s   
&zTestChandrupatlaMinimize.fru   float32float64ry   333333?g?rl   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Ơ>rz   c                 3   s    | ]
}j | d V  qdS )rt   N)rw   )r   xiru   r   r   r   	<genexpr>   s    z6TestChandrupatlaMinimize.test_basic.<locals>.<genexpr>r   rL   rt   r   argsrtol)getattrrw   Zbroadcast_tor   normZpdfr   _chandrupatla_minimizer$   r
   rJ   r   r=   )rx   ry   r   ru   r   r4   r=   r#   r   r   r   
test_basic   s   
"z#TestChandrupatlaMinimize.test_basicr   rk   rU      rU   rG   rG   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 )Nro   r~   rk   r}                 rR   c                    s   t jg R d| fiS )Nr   )r   r$   )Z
loc_single)r4   rx   r   r   chandrupatla_single   s   zHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_singlec                          j d7  _ j| i |S Nr   f_evalsr$   r   r/   r$   rx   r   r   r$         z6TestChandrupatlaMinimize.test_vectorization.<locals>.fr   r   )rJ   r=   successstatusnfevnitr5   r:   r6   r8   r;   r9   c                    s   g | ]}t | qS r   )r   r   ref)attrr   r   r          z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>rU   boolZintegral)linspacereshaperw   r   r(   r   r   stackr   r   r   r   r=   r$   rJ   r8   r5   r;   r:   r9   r6   maxr   r   isdtyper   ru   r   )rx   r   r   ry   r   xp_testr   r#   refsattrsZref_attrZres_attrr   )r   r4   r$   rx   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      @rG   r   rI   r   r   r   <lambda>      z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>c                 S      | d S Nrl   r   rI   r   r   r   r         c                 S   r   )Nr   r   r   rI   r   r   r   r   	  r   c                         |   jS r3   	full_likerw   nanrI   r   r   r   r   
  r   .)r   r	   intr   r"   r   )xsjsfuncsr#   r   rJ   jr   r   r   r$     s   

z.TestChandrupatlaMinimize.test_flags.<locals>.fr   rt   r   rG   rl   r   r[   )arangeint64rw   r|   nprv   r   eim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRint32r   r   )rx   r   r$   r   r4   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 rU   sizer   r   rL   r   r+   r*   r)   r,   MbP?r+   r   rt   rU   ư>r*   r)   rG   r,   )r   randomdefault_rngrw   dictcopyr   r$   absr6   r5   ru   r   fullrJ   r8   r;   r9   r=   )rx   r   rngpr4   r   kwargs0r/   res1Zj1Ztolres2Zj2Zh1Z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   rL   r   rU   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   rJ   r   )iterr#   hasattrr5   r:   r6   allr   r   _EINPROGRESSr   r$   r8   r;   r9   rJ   r=   StopIteration)r#   Z
changed_xrZ
changed_xlr4   r2   ry   r[   rx   r   r   r   r2   d  s$   

z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callbackr_   r   r2   r   )rw   r   r$   anyr   r   r   r   r   r5   r6   r   r#   keysr   r   
_ECALLBACKrx   r   r#   r   r.   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ؗҜ<rt   )r+   r)   r*   r,   )r^   rw   r|   r   r   r   r   )rx   r   r   r?   rX   r   r\   rY   r]   rK   rN   rQ   r+   r)   r*   r,   r4   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 )	Nrt   r   rL   c                    s"   | j  ksJ | | d  S NrG   )ru   Zastype)rJ   ry   ru   r   r   r   r$     s   z.TestChandrupatlaMinimize.test_dtype.<locals>.fr   r   )r   rw   r   r   rJ   ru   r
   r    sqrtZfinfoeps)rx   ry   ru   r   r4   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.rc   r   r   match3Abscissae and function output must be real numbers.            ?c                 S      | S r3   r   rI   r   r   r   r         z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>z...be broadcast...ra   r   rU   r   rL   c                 S   r   r3   r   rI   r   r   r   r     r   z:The shape of the array returned by `func` must be the samerL   c                 S      | d | d | d gS )N)r   .)r   .r   rI   r   r   r   r     r   (Tolerances must be non-negative scalars.c                 S   r   r3   r   rI   r   r   r   r     r   r+   r_   c                 S   r   r3   r   rI   r   r   r   r     r   r*   c                 S   r   r3   r   rI   r   r   r   r     r   r)   ekkic                 S   r   r3   r   rI   r   r   r   r     r   r,   )`maxiter` must be a non-negative integer.c                 S   r   r3   r   rI   r   r   r   r     r   r[         ?c                 S   r   r3   r   rI   r   r   r   r     r   `callback` must be callable.c                 S   r   r3   r   rI   r   r   r   r     r   r2   	shrubbery)rw   pytestraises
ValueErrorr   RuntimeErrorr   )rx   r   messager4   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      ?r_   r   rM   r   r   r   r   V瞯<)r   rw   r   Znewaxislistr   Tr   r$   r   iscloserJ   r=   r
   Zbroadcast_arrays)rx   r   r   ry   Z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   rG   r   ru   rI   r   r   r   r$     s   z6TestChandrupatlaMinimize.test_special_cases.<locals>.fr   rT   ignoreinvalid)r)   r,   r   r   r   gN~hatolc                 S   r   Nr   rG   r   rI   r   r   r   r$        r   c                 S   r   r  r   rI   r   r   r   r$     r  r   g?rL   r[   rU   ra   c                 S   s   | | d d S )NrG   r   r   rJ   cr   r   r   r$     rO   r_   UUUUUU?r   c                    s     |  S r3   )sinrI   r   r   r   r$      r  )r+   r*   r)   r,   )r   rw   r   errstater   r   r
   rJ   r=   r   r5   r6   r   r   r   rv   r:   )rx   r   r$   r4   r#   r  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  r  r   r   r   r   rs      s$    
)<4
.rs   Z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 r3   )r   ndtr)rx   qr   r   r   r   r$   5  s   zTestChandrupatla.fr   r}   ro   r~   rl   c                 C   s`   | d| d}}t| j||| |fd}|j t || |jd}t|j| d S )Nr   rR   r   rt   )	rw   _chandrupatla_rootr$   r   r   Zppfru   r
   rJ   )rx   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 )Nro   r~   rk   r}   c                    s   t  jdd| fdS )Nr   rL   r(  )r)  r$   )r   )rx   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   rR   r(  c                 S      g | ]}|j qS r   rI   r   r   r   r   r   W      z7TestChandrupatla.test_vectorization.<locals>.<listcomp>rt   c                 S   r,  r   )r=   r   r   r   r   r   [  r-  r  r  c                 S   s   g | ]}t |jqS r   )r   r   r   r   r   r   r   `  r   c                 S   r,  r   )r   r   r   r   r   r   d  r-  c                 S   r,  r   )r   r   r   r   r   r   h  r-  c                 S   r,  r   )r   r   r   r   r   r   q  r-  rG   c                 S   r,  r   )r5   r   r   r   r   r   z  r-  c                 S   r,  r   )r6   r   r   r   r   r   ~  r-  g&.>c                 S   r,  r   )r8   r   r   r   r   r     r-  c                 S   r,  r   )r9   r   r   r   r   r     r-  )"r   r   r   r|   rw   ru   r   Z	vectorizer   r)  Zravelr
   rJ   r=   r   r$   r   r   r   r   r   r   r   r   r   r5   r6   r   isfiniter   r8   r9   r   minimum)rx   r   r   r   Zp_xpZargs_xpru   r   r   r#   r   Zref_xZref_funZref_successZref_flagZref_nfevZref_nitZref_xlZref_xrZfiniter  Zref_flZ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   rI   r   r   r   r     r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>c                 S   r   r   r   rI   r   r   r   r     r   c                 S   r   N皙?rU   r   rI   r   r   r   r     r   c                    r   r3   r   rI   r   r   r   r     r   c                    s    g | ]\}} t | |qS r   )r   r   rJ   r   r   r   r   r     r1   z:TestChandrupatla.test_flags.<locals>.f.<locals>.<listcomp>c                 S   r   r0  r   rI   r   r   r   r     r   c                 S   r   r   r   rI   r   r   r   r     r   c                 S   r   r1  r   rI   r   r   r   r     r   c                    s    j S r3   )r   rI   r   r   r   r     s    c                    s   g | ]
\}} | |qS r   r   r3  r4  r   r   r     s    )ru   r   r   zip)r   r   r   r4  r   r$     s   

z&TestChandrupatla.test_flags.<locals>.fr   rt   r   rG   r   )r   r   rw   rv   r)  r   r   r   r   r   r   r   r   )rx   r   r$   r   r*  r+  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   rU   r   rR   r   r   r   r+   r   r*   r)   r,   )r   r   r   rw   r   r   r)  r$   r   r6   r5   r   r   rJ   r=   r/  )rx   r   r   r   r4   r   r   r/   r   r   rX   rY   Z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   rR   rL   c                    s   t | | }|  _| _|S r3   )r   r&  rJ   r=   )r'  r   r#   r&   r   r   r$     s   z1TestChandrupatla.test_maxiter_callback.<locals>.fr   rG   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   r5   r6   r   r   r   r   r   r$   r8   r9   rJ   r=   r   )r#   changed)r4   r2   r[   r   rx   r   r   r   r2     s$   

z8TestChandrupatla.test_maxiter_callback.<locals>.callbackr_   r   r   rt   _)rw   rJ   r=   r)  r   r   r   r   r   r   r#   r5   r6   r   r   r   r   r   r   
startswithr   r   )r4   r2   r$   r[   r   rx   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   rt   r   g|=gh㈵>)r*   r+   g:0yE>gMb`?)r   r  )rw   r|   r)  r
   r=   r   r   r   )	rx   r   r   r$   r4   rootZnfevalidr#   r   r   r   r     s   z"TestChandrupatla.test_nit_expectedr9  gCl?gV-?ru   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 )NrF   rt   )r   rw   )rJ   r9  r#   r   r   r   r$   =  s   z&TestChandrupatla.test_dtype.<locals>.fr   rt   rU   r   )r   r+   r  r   )r   r  skipr   rw   r)  r
   rJ   AssertionErrorru   r   r=   )	rx   r9  ru   r   Z	not_numpyr$   r*  r+  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   r3   r   rI   r   r   r   r?   O  s   z4TestChandrupatla.test_input_validation.<locals>.funcr   r   rc   r   r   r   z...not be broadcast...ra   r   r   z,The shape of the array returned by `func`...rL   c                 S   r   )Nr   r   r   rI   r   r   r   r   e  r   z8TestChandrupatla.test_input_validation.<locals>.<lambda>r   r+   r_   r*   r)   r   r,   r   r[   r   r   r2   r   )r  r  r  rw   r)  r  r   )rx   r   r?   r  r4   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   rI   r   r   r   r$     s   z.TestChandrupatla.test_special_cases.<locals>.f)r2  r   r   r2  )?r  r=  r  r  )divider  r   r   r   c                    s     | jds	J | d d S )Nr     r   r  rI   r  r   r   r$     s   r  rL   r  c                 S   s   | d | S r   r   )rJ   r9  r   r   r   r$     r  r(  FTc                 S   s   d|  S r   r   rI   r   r   r   r$     s   r  c                 S   s   | d d S )NrU   r   r   rI   r   r   r   r$     r  g      rR   )r[   ra   rt   rG   rU   c                 S   s   ||  d S r   r   r  r   r   r   r$     r  r_   r  )rw   r   r  r)  r   r   r
   rJ   r   r   r   r   infr   r   r   r   r5   r6   )rx   r   r$   r*  r+  r#   r9  r@  r   r  r   r  |  sZ   "

"z#TestChandrupatla.test_special_casesN)r  r  r   r$   r  r!  r"  r   r   r   r#  r   r   r   r   r   r   r   r  r  r   r   r   r   r%  +  s     


W.9
0r%  )0r    r  numpyr   Zscipyr   r   Z(scipy._lib._elementwise_iterative_methodZ_libZ_elementwise_iterative_methodr   Zscipy.conftestr   Zscipy._lib._array_apir   r   r   r   r	   Zscipy._lib._array_api_no_0dr
   r   r   Zscipy.optimize.elementwiser   r   Zscipy.optimize._tstutilsr   	itertoolsr   Z
test_zerosr   r(   rD   r)  r   rK   rN   rQ   rS   rW   r^   r$  r!  Zusefixturesrq   rs   r%  r   r   r   r   <module>   s8   %	
 !"#$%&'()*+,-./01234567;
  j
