o
    Ö­jl˜  ã                	   @   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   © úc/var/www/html/CropPilot/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 )Néd   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 )Ng�ö—›wãù?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   é	   é   é
   é   é   çš™™™™™©¿gš™™™™™¹¿g333333Ã¿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{®Gázt?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s¸J ‚| |j¡ˆjd ksÅJ ‚| |jjd¡sÏJ ‚| |jjd¡sÙJ ‚| |jjd¡sãJ ‚| |jjd¡síJ ‚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s„J ‚ql|| ˆj|   kr—|| ksšJ ‚ 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r‡t‚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 s”w   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 sËw   Y  d}|  d¡|  d¡|  d¡f}tjt|d�� tdd	„ g|¢R ddiŽ W d   ƒ n1 sÿw   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 �s—w   Y  tjt|d�� td!d	„ g|¢R ddiŽ W d   ƒ n	1 �s¼w   Y  d"}tjt|d�� td#d	„ g|¢R d$d%iŽ W d   ƒ d S 1 �säw   Y  d S )&Nú`func` must be callable.rg   r   r”   ©Úmatchú3Abscissae 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
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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>.féùÿÿÿr   rX   Úignore©Úinvalid)r,   r-   rÖ   rŠ   r—   g¬÷N’~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|ƒrât|	j|ƒ | |	j¡ˆ jksáJ ‚n|	jj|ksêJ ‚|	jj|jksóJ ‚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 ¡�sŠJ ‚t|ƒ�r‘d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r“t|| ˆj tjˆjd�ƒ t|| ˆj tjˆjd�ƒ qp| d¡r™qpt|| || ƒ 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»½×Ùß|û=gñhãˆµøä>)r/   r.   g:Œ0âŽyE>gü©ñÒMb`?)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  g�•C‹lçã?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 s†w   Y  d}t jt|d��  | ddg¡| ddg¡f}tdd„ g|¢R Ž  W d   ƒ n1 s·w   Y  d}| d¡| d¡f}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 �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 �s˜w   Y  d}t jt|d�� t|g|¢R ddiŽ W d   ƒ d S 1 �s¾w   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 s¿w   Y  |jsÉJ ‚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
ÿÿÿ