o
    `^h0                     @   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nr   gYn)atol)asarraymathpir   r   )xpxrefres r   `/home/air/shanriGPT/back/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-S ).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'&l7i@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      Dr   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<y9B.?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_imaginaryN)__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!   !   s4    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*lI9i?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   )ir      2   )r   iE  i  i  )g	+9g.K|T}%m;g]7=g\?)rB   gpk&gTV6?gd?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    
	
 a