o
    Ö­je3  ã                   @   sè   d dl Z d dlZd dlZd dlmZ d dlmZ d dl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 g d¢Zd	d
gZeej d¡ejjddd�dd„ ƒƒƒZeej d¡ejjddd�G dd„ dƒƒƒƒZG dd„ dƒZdS )é    N)Úassert_allclose)Úarray_api_compatible)Úarray_namespaceÚis_array_api_strict)Úxp_assert_equalÚxp_assert_closeÚxp_assert_less)Ú	logsumexpÚsoftmax)Ú_wrap_radians)Úfloat32Úfloat64Úint32Úint64Ú	complex64Ú
complex128r   r   Úskip_xp_backendsz	jax.numpyz)JAX arrays do not support item assignment)Úreasonc                 C   sz   |   tj d tj dddddtjtjd g	¡}|   tjd tjdddddtjtj d g	¡}t|| ƒ}t||dd� d S )Né   éÿÿÿÿgYóøÂn¥�r   gYóøÂn¥)Úatol)ÚasarrayÚmathÚpir   r   )ÚxpÚxÚrefÚres© r   ú_/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/special/tests/test_logsumexp.pyÚtest_wrap_radians   s   ÿÿ
r    c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zej ddg d¢f¡ejjdd�dd„ ƒƒZejjddd�dd„ ƒZej de¡dd „ ƒZej d!e¡ej d"e¡d#d$„ ƒƒZd%d&„ Zej dd'd(g¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/S )0ÚTestLogSumExpc                 C   sN  |  g ¡}|  |j ¡}tt|ƒ|ƒ |jd|jd�}| | | |¡¡¡}t	t|ƒ|ƒ |  ddg¡}|  dt
 d¡ ¡}t	t|ƒ|ƒ d}| |fd¡}|  dt
 |¡ ¡}t	t|ƒ|ƒ |  dgd	 ¡}| |¡}| ||g¡}| ||g¡}	t	| t|	ƒ¡| |¡ƒ t	| t|	d
d�¡|j|d
d�ƒ t	| t|	dd�¡|j|dd�ƒ |  |jg¡}
|  |jg¡}tt|
ƒ|
d
 ƒ tt|
 ƒ|
d
  ƒ tt|ƒ|d
 ƒ tt|  |j |j g¡ƒ|
d
  ƒ |  ddgdtj gg¡}|  ddg¡}t	t|dd�|ƒ t|ƒ}|j|dd�}t	t|ddd�|ƒ t	t|dd�|  d¡ƒ d S )Nç      i@©Údtypeç     @�@ç       @éè  é'  g     ˆÃ@çœWw'&l¡7i@B r   ©Úaxisr   g    _ Bg»½×Ùß|Û=g    _ Âr   T)r+   Úkeepdims)r   éþÿÿÿ)r   Úinfr   r	   Úaranger   ÚlogÚsumÚexpr   r   ÚfullÚstackÚnanÚnpr   Úexpand_dims)Úselfr   ÚaÚdesiredÚbÚnr   ÚlogxÚXÚlogXr.   r5   r   Úxp_testr   r   r   Útest_logsumexp&   sF   

""&

ÿzTestLogSumExp.test_logsumexpc           
      C   sT  |j d|jd�}|  ddd¡}| | || |¡ ¡¡}tt||d�|ƒ | ddg¡}| ddg¡}| dt d¡ ¡}tt||d�|ƒ | d	gd
 ¡}| 	ddd
¡}| |¡}| 
||f¡}| 
||f¡}| 
||f¡}	t| t||	d�¡| |	| ¡ƒ t| t||	dd�¡|j|	| dd�ƒ t| t||	dd�¡|j|	| dd�ƒ d S )Nr"   r#   ç        ç      ð¿©r;   r'   g333333ó?g333333@r)   i † r   r   )r;   r+   r*   )r/   r   r0   r1   r2   r   r	   r   r   Úlinspacer4   )
r8   r   r9   r;   r:   r   r=   r>   r?   ÚBr   r   r   Útest_logsumexp_bY   s"   
"(,zTestLogSumExp.test_logsumexp_bc                 C   sR   |  g d¢¡}|  g d¢¡}t||dd�\}}t||  d¡ƒ t||  d¡ƒ d S )N)r   r   r   )r   r   r   T©r;   Úreturn_signç      ð?rC   )r   r	   r   r   ©r8   r   r9   r;   ÚrÚsr   r   r   Útest_logsumexp_signn   s
   z!TestLogSumExp.test_logsumexp_signc                 C   sf   |  ddg¡}|  ddg¡}t||dd�\}}| |¡rJ ‚| |¡r%J ‚|dk s+J ‚|dks1J ‚d S )Nr   r   TrH   r   )r   r	   ÚisfiniteÚisnanrK   r   r   r   Útest_logsumexp_sign_zerov   s   z&TestLogSumExp.test_logsumexp_sign_zeroc                 C   s€   |  d¡}| |¡}t|d|dd�\}}|j|j  kr!dks$J ‚ J ‚t|d|dd�\}}|j|j  kr;dks>J ‚ J ‚d S )N©r   é   é   é   rS   T)r+   r;   rI   ©r   rS   rU   ©r   rT   ©ÚonesÚ	ones_liker	   ÚshaperK   r   r   r   Útest_logsumexp_sign_shape€   s   

 $z'TestLogSumExp.test_logsumexp_sign_shapec                 C   s^   |  g d¢¡}t|dd�\}}| | |¡¡}|| |¡ }t||ƒ t|| |¡ |ƒ d S )N)y      ð?      ð?y       @      ð¿y       À      @T)rI   )r   r	   r1   r2   Úabsr   )r8   r   r9   rL   rM   Úexpected_sumexpÚexpected_signr   r   r   Útest_logsumexp_complex_signŠ   s   
z)TestLogSumExp.test_logsumexp_complex_signc                 C   sP   |  d¡}| |¡}t|d|d�}|jdksJ ‚t|d|d�}|jdks&J ‚d S )NrR   rS   )r+   r;   rV   rW   rX   )r8   r   r9   r;   rL   r   r   r   Útest_logsumexp_shape–   s   

z"TestLogSumExp.test_logsumexp_shapec                 C   s8   |  ddg¡}|  ddg¡}tt||d�|  d¡ƒ d S )Nr   r(   r   rD   rJ   )r   r   r	   ©r8   r   r9   r;   r   r   r   Útest_logsumexp_b_zero    s   z#TestLogSumExp.test_logsumexp_b_zeroc                 C   s$   |  d¡}| d¡}t||d� d S )N)rU   r   rS   r   )rT   r   é   rD   )ÚzerosrY   r	   rb   r   r   r   Útest_logsumexp_b_shape¦   s   

z$TestLogSumExp.test_logsumexp_b_shapeÚargr   )r   rS   rT   T)Únp_onlyc                 C   s$   t |ƒt t t |¡¡ƒksJ ‚d S )N)r	   r6   r   Ú
atleast_1d)r8   rg   r   r   r   r   Útest_xp_invalid_input¬   s   $z#TestLogSumExp.test_xp_invalid_inputz#Lists correspond with NumPy backend)rh   r   c                 C   s4   ddg}|j dt d¡ tjd�}tt|ƒ|ƒ d S )Nr'   r%   r&   r#   )r   r   r0   r6   r   r   r	   )r8   r   r9   r:   r   r   r   Ú	test_list±   s   zTestLogSumExp.test_listr$   c                 C   sj   t ||ƒ}|jddg|d�}t|ƒ}| |d¡r| d¡jn|}|jdt d¡ |d�}tt|ƒ|ƒ d S )Nr%   r#   ÚintegralrJ   r&   )	Úgetattrr   r   Úisdtyper$   r   r0   r   r	   )r8   r$   r   r9   r@   Údesired_dtyper:   r   r   r   Útest_dtypes_a¸   s   
ÿzTestLogSumExp.test_dtypes_aÚdtype_aÚdtype_bc                    sÔ   t ||ƒ}t ||ƒ}|jddg|d�}|jddg|d�}t||ƒ‰ t|ƒrE‡ fdd„||fD ƒ}t|ƒdk r?| | d¡j¡ ˆ j|Ž }	nˆ  |||j¡}	|jt	 
t	 d¡t	 d¡ ¡|	d�}
tt||d�|
ƒ d S )	NrS   r   r#   r   c                    s   g | ]
}ˆ   |d ¡s|‘qS )rl   )rn   )Ú.0r$   ©r@   r   r   Ú
<listcomp>Ë   s    

ÿz0TestLogSumExp.test_dtypes_ab.<locals>.<listcomp>rJ   rD   )rm   r   r   r   ÚlenÚappendr$   Úresult_typer   r   r0   r2   r   r	   )r8   rq   rr   r   Ú
xp_dtype_aÚ
xp_dtype_br9   r;   Úxp_float_dtypesro   r:   r   rt   r   Útest_dtypes_abÂ   s   


$zTestLogSumExp.test_dtypes_abc                 C   s8   |  ddg¡}t|ƒ}| |d |d ¡}t||ƒ d S )NrB   g      DÀr   r   )r   r	   Ú	logaddexpr   )r8   r   r9   r   r   r   r   r   Útest_gh18295Ö   s   zTestLogSumExp.test_gh18295r   r   c                 C   s  t j d¡}t||ƒ}d}| dd|¡d| dd|¡  }|j||d�}t|dd�}| |j| 	|¡dd�¡}| 
| |¡| |j¡¡}t| | |¡¡|ƒ t||ƒ t|ddd	�\}	}
|j| 	|¡dd�}t| | |
¡¡|ƒ t|	| | |¡¡ƒ t|
|| |¡ ƒ d S )
Nl   &¦DN$)é
   éd   r   é(   y              ð?r#   r*   T)rI   r+   )r6   ÚrandomÚdefault_rngrm   Úuniformr   r	   r0   r1   r2   Ú	full_likeÚimagr   r   r]   r   Úreal)r8   r   r$   Úrngr[   r   r   r   ÚmaxÚoutÚsgnr   r   r   Útest_gh21610Þ   s   
 
zTestLogSumExp.test_gh21610c                 C   sV   |  ddg¡}t|ƒ}|  d¡}t| |¡| |¡ƒ t| |¡| |¡ddd� d S )Nr   y        š™™™™™y<yï9úþB.æ?š™™™™™i<gVçž¯Ò<)r   Úrtol)r   r	   r   r‡   r†   )r8   r   r   r   r   r   r   r   Útest_gh21709_small_imaginary÷   s
   
 z*TestLogSumExp.test_gh21709_small_imaginaryc                 C   sh   |  g d¢¡}|  g d¢¡}tt||d�t||dd�d ƒ |  g d¢¡}tt||d�|  |j¡ƒ d S )N)gr¯£ÜCƒ@gå� X××?g™	mÖlÿ@)çª_+™Jþ?çãÌeYæ»@g®|H•4ë¿rD   TrH   r   )r�   r�   g«R%ÍÀ)r   r   r	   r5   rb   r   r   r   Útest_gh22903  s
    zTestLogSumExp.test_gh22903N)Ú__name__Ú
__module__Ú__qualname__rA   rG   rN   rQ   r\   r`   ra   rc   rf   ÚpytestÚmarkÚparametrizer   rj   rk   Údtypesrp   r|   r~   rŒ   rŽ   r‘   r   r   r   r   r!   !   s6    3


ÿ

	
r!   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSoftmaxc                 C   sÒ   t tg d¢ƒt g d¢¡dd� t tddgƒt ddg¡dd� t tddgƒt dtjg¡dtj  dd� t d¡}t g d	¢¡}t t|ƒ|dd� t t|d
 ƒ|dd� t t| dd¡ƒ| dd¡dd� d S )N)r'   r   r   r   )r   r   r   r   ç‚vIhÂ%<=©r�   r   ç      à?r   rU   )g*lI9üi ?g™{O¶?gW-RÎ?gI³ôòšä?r€   rS   )r   r
   r6   ÚarrayÚer/   Úreshape)r8   r   Úexpectedr   r   r   Útest_softmax_fixtures  s   ÿ $ÿ

ÿz!TestSoftmax.test_softmax_fixturesc                 C   sö   t tddgddggdd�t ddgddgg¡dd� t tddgddggdd�t ddgddgg¡dd� t g d¢g d	¢g¡}t g d
¢g d¢g¡}t t|dd�|dd� t t|jdd�|jdd� | ddd¡}t t|dd�| ddd¡dd� d S )Nr'   r   r*   rœ   rš   r›   r   )içÿÿÿr   é   é2   )r   iE  ií  iî  )g£×Ù	Ñ+9g.K|T}%m;gÕð]¤7Š®=g\þÿÿÿï?)rB   g‘pk´&•g†ºTV6Ñ?g¼¢ÕõÔdç?rS   )r   rS   )r   r
   r6   r�   ÚTrŸ   )r8   r   r    Úx3dr   r   r   Útest_softmax_multi_axes/  s$   ÿÿ
ÿ
ü
ÿz#TestSoftmax.test_softmax_multi_axesN)r’   r“   r”   r¡   r¦   r   r   r   r   r™     s    r™   )r   r•   Únumpyr6   Únumpy.testingr   Úscipy.conftestr   Úscipy._lib._array_apir   r   Úscipy._lib._array_api_no_0dr   r   r   Úscipy.specialr	   r
   Úscipy.special._logsumexpr   r˜   Úintegral_dtypesr–   Úusefixturesr   r    r!   r™   r   r   r   r   Ú<module>   s2    
ÿ	
ÿ o