
    YhpI                        d dl Zd dlZd dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZmZmZ d dlmZ g dZddgZd	 Zej                            d
          ej                            d          ej                            d           ee           G d d                                                          Z ee           G d d                      Z ee           G d d                      ZdS )    N)is_array_api_strictmake_xp_test_casexp_default_dtype	xp_device)xp_assert_equalxp_assert_closexp_assert_less)log_softmax	logsumexpsoftmax)_wrap_radians)float32float64int32int64	complex64
complex128r   r   c                    |                      t          j         dz
  t          j         dddddt          j        t          j        dz   g	          }|                      t          j        dz
  t          j        dddddt          j        t          j         dz   g	          }t          ||           }t	          ||d           d S )N   gYnr   gYn)xp)atol)asarraymathpir   r   )r   xrefress       t/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/special/tests/test_logsumexp.pytest_wrap_radiansr       s    


TWHQJ"gvq$'47196 	7 	7A
**dgai"gvq$'DG8A:7 8 8C
b
!
!
!CC1%%%%%%    z/ignore:invalid value encountered:RuntimeWarningz0ignore:divide by zero encountered:RuntimeWarningz*ignore:overflow encountered:RuntimeWarningc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                            d
dg df          d             Zd Zej                            de          d             Zej                            de          ej                            de          d                         Zd Zej                            dddg          d             Zd Zej                            d ej        ej         ej         eej         d           eej         d           eej         ej                   eej         ej                    eej        d           eej        d           eej        ej                   eej        ej                    eej         d           eej         d           eej         d           eej         d           eej        d           eej        d           eej        d           eej        d          gd !                    d"             Zd# Zej                            d$d%d&g g          d'             Zd( Zd)S )*TestLogSumExpc                    |                     g           }|                     |j                   }t          t          |          |           |                    d|j                  }|                    |                    |                    |                              }t          t          |          |           |                     ddg          }|                     dt          j        d          z             }t          t          |          |           d}|                    |fd          }|                     dt          j        |          z             }t          t          |          |           |                     dgd	z            }|                    |          }|                    ||g          }|                    ||g          }	t          |                    t          |	                    |                    |                     t          |                    t          |	d
                    |                    |d
                     t          |                    t          |	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          t          |dd          |           t          t          |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npexpand_dims)selfr   adesiredbnr   logxXlogXr1   r8   r   s                r   test_logsumexpzTestLogSumExp.test_logsumexp%   s   JJrNN**bfW%%	!g... IId"*I--&&q		**++	!g... JJu~&&**Vdhsmm344	!g...GGQD%  **Wtx{{233	!g...JJw())vvayyHHaVxxt%%y//;;;yA666779J9JKKKyA666779J9JKKK jj"&""jj"&""	#A///	3$#a&111	#A///	"**rvgw-?"@"@AACF7KKK JJu(* + +jj$''	!"---s333 nnSrn**	!"t<<<cBBB 		!(333RZZ5E5EFFFFFr!   c           	         |                     d|j                  }|                     ddd          }|                    |                    ||                    |          z                      }t          t          ||          |           |                    ddg          }|                    ddg          }|                    dt          j        d          z             }t          t          ||          |           |                    d	gd
z            }|	                    ddd
          }|                    |          }|
                    ||f          }|
                    ||f          }|
                    ||f          }	t          |                    t          ||	                    |                    |	|z                       t          |                    t          ||	d                    |                    |	|z  d                     t          |                    t          ||	d                    |                    |	|z  d                     d S )Nr%   r&                 r>   r*   g333333?g333333@r,   i r   r   )r>   r.   r-   )r2   r   r3   r4   r5   r   r   r   r   linspacer7   )
r;   r   r<   r>   r=   r   r@   rA   rB   Bs
             r   test_logsumexp_bzTestLogSumExp.test_logsumexp_bW   s   IId"*I--IIdB$$&&"&&)),,--	!q)))7333JJd|$$JJSz""**TDHW$5$5566	!q)))7333JJw'((KK4((vvayyHHaVxxt%%HHaVy33344bffQUmmDDDy;;;<<bffQUQRf>S>STTTy;;;<<bffQUQRf>S>STTTTTr!   c                    |                     g d          }|                     g d          }t          ||d          \  }}t          ||                     d                     t          ||                     d                     d S )N)r   r   r   )r   r   r   Tr>   return_sign      ?rF   )r   r   r   r   r;   r   r<   r>   rss         r   test_logsumexp_signz!TestLogSumExp.test_logsumexp_signl   s~    JJyyy!!JJ{{{##aT22212::b>>***2::c??+++++r!   c                    |                     ddg          }|                     ddg          }t          ||d          \  }}|                    |          rJ |                    |          rJ |dk     sJ |dk    sJ d S )Nr   r   TrL   r   )r   r   isfiniteisnanrO   s         r   test_logsumexp_sign_zeroz&TestLogSumExp.test_logsumexp_sign_zerot   s    JJ1vJJ2waT2221;;q>>!!!88A;;1uuuuAvvvvvvr!   c                    |                     d          }|                    |          }t          |d|d          \  }}|j        |j        cxk    rdk    sn J t          |d|d          \  }}|j        |j        cxk    rdk    sn J d S )Nr            rY   T)r.   r>   rM   r   rY   r[   r   rZ   ones	ones_liker   shaperO   s         r   test_logsumexp_sign_shapez'TestLogSumExp.test_logsumexp_sign_shape~   s    GGL!!LLOOaT:::1w!'....Y......1$???1w!'****U********r!   c                 H   |                     g d          }t          |d          \  }}|                    |                    |                    }||                    |          z  }t          ||           t          ||                    |          z  |           d S )N)y      ?      ?y       @      y             @T)rM   )r   r   r4   r5   absr   )r;   r   r<   rP   rQ   expected_sumexpexpected_signs          r   test_logsumexp_complex_signz)TestLogSumExp.test_logsumexp_complex_sign   s    JJ00011---1&&++'"&&*A*AA=)))BFF1II77777r!   c                     |                     d          }|                    |          }t          |d|          }|j        dk    sJ t          |d|          }|j        dk    sJ d S )NrX   rY   )r.   r>   r\   r]   r^   )r;   r   r<   r>   rP   s        r   test_logsumexp_shapez"TestLogSumExp.test_logsumexp_shape   sv    GGL!!LLOOaa1%%%w)####af***w&      r!   c                     |                     ddg          }|                     ddg          }t          t          ||          |                     d                     d S )Nr   r+   r   rG   rN   )r   r   r   r;   r   r<   r>   s       r   test_logsumexp_b_zeroz#TestLogSumExp.test_logsumexp_b_zero   sY    JJ5z""JJ1v	!q)))2::b>>:::::r!   c                 |    |                     d          }|                    d          }t          ||           d S )N)r[   r   rY   r   )rZ   r      rG   )zerosr_   r   rk   s       r   test_logsumexp_b_shapez$TestLogSumExp.test_logsumexp_b_shape   s=    HH\""GGI!qr!   argr   )r   rY   rZ   c                     t          |          t          t          j        t          j        |                              k    sJ d S N)r   r9   r   
atleast_1d)r;   rq   s     r   test_xp_invalid_inputz#TestLogSumExp.test_xp_invalid_input   s;    ~~2:bmC6H6H+I+I!J!JJJJJJJr!   c                     ddg}t          j        dt          j        d          z             }t	          t          |          |           d S )Nr*   r(   r)   )r9   r   r   r3   r   r   )r;   r<   r=   s      r   test_array_likezTestLogSumExp.test_array_like   sC    4L*Vdhsmm344	!g.....r!   r'   c                 N   t          ||          }|                    ddg|          }|                    |d          r|                    d          j        n|}|                    dt	          j        d          z   |          }t          t          |          |           d S )Nr(   r&   integralrN   r)   )getattrr   isdtyper'   r   r3   r   r   )r;   r'   r   r<   desired_dtyper=   s         r   test_dtypes_azTestLogSumExp.test_dtypes_a   s    E""JJu~UJ3313E:1N1N $B--# 	**Vdhsmm3=*II	!g.....r!   dtype_adtype_bc                    t          |          }t          |          }                    ddg|          }                    ddg|          }t                    r[fd||fD             }t          |          dk     r-|                                        d          j                    j        | }	n;                    ||          }	                    |	d          rt                    }	                    t          j
        t          j        d          t          j        d          z
            |	          }
t          t          ||          |
           d S )	NrY   r   r&   r   c                 @    g | ]}                     |d           |S )ry   )r{   ).0r'   r   s     r   
<listcomp>z0TestLogSumExp.test_dtypes_ab.<locals>.<listcomp>   sB     E E E&(jj
&C&CEu E E Er!   rN   ry   rG   )rz   r   r   lenappendr'   result_typer{   r   r   r3   r5   r   r   )r;   r~   r   r   
xp_dtype_a
xp_dtype_br<   r>   xp_float_dtypesr|   r=   s      `       r   test_dtypes_abzTestLogSumExp.test_dtypes_ab   si    R))
R))
JJ1vZJ00JJ2wjJ11r"" 	4E E E E:z2J E E EO?##a''&&rzz"~~';<<<*BNO<MMNN:zBBMzz-44 4/33}**TXdhqkkDHQKK&?@@*VV	!q)))733333r!   c                     |                     ddg          }t          |          }|                    |d         |d                   }t          ||           d S )NrE   g      Dr   r   )r   r   	logaddexpr   )r;   r   r<   r   r   s        r   test_gh18295zTestLogSumExp.test_gh18295   sU     JJU|$$llll1Q41&&S!!!!!r!   r   r   c                     t           j                            d          }t          ||          }d}|                    dd|          d|                    dd|          z  z   }|                    ||          }t          |d          }|                    |                    |	                    |          d                    }|
                    |                    |          |j                  }t          |                    |                    |                    |           t          ||           t          |dd	          \  }	}
|                    |	                    |          d          }t          |                    |                    |
                    |           t          |	|                    |                    |                               t          |
||                    |          z             d S )
Nl   &DN$)
   d   r   (                 ?r&   r-   T)rM   r.   )r9   randomdefault_rngrz   uniformr   r   r3   r4   r5   	full_likeimagr   r	   rd   r   real)r;   r   r'   rngra   r   r   r   maxoutsgns              r   test_gh21610zTestLogSumExp.test_gh21610   s    i##$677E""KK2u%%ckk!R.G.G(GGJJqJ&&"""ffRVVBFF1IIAV..//ll2773<<//rvvbggcll++S111S!!!QDq999SffRVVAYYQf''rvvbggcll++S111RWWRVVC[[11222S_-----r!   c                 Z   |                     ddg          }t          |          }|                     d          }t          |                    |          |                    |                     t          |                    |          |                    |          dd           d S )Nr   y        y<y9B.?i<gV瞯<)r   rtol)r   r   r   r   r   )r;   r   r   r   r   s        r   test_gh21709_small_imaginaryz*TestLogSumExp.test_gh21709_small_imaginary   s     JJ5677ll
 jjCDDbggcll333bggcllGGGGGGr!   zx,yrE   g       g%u?g}b@g"~j@gH@rY   )repeatc           
         t          |                    ||g                    }|                    |                    |                    |                    ||g                                        }t          ||           d S rs   )r   r   r3   r4   r5   r   )r;   r   yr   r   r   s         r   test_gh22601_infinite_elementsz,TestLogSumExp.test_gh22601_infinite_elements  sp    4 

Aq6**++ffRVVBFF2::q!f#5#5667788S!!!!!r!   c                 6   |                     ddg          }|                     ddg          }t          |           t          ||           t          ||                     ddg                     t          ||                     ddg                     dS )zFTest that logsumexp doesn't accidentally write back to its parameters.g      @g      @g      @r)   rG   N)r   r   r   rk   s       r   test_no_writebackzTestLogSumExp.test_no_writeback  s    JJBx  JJBx  !!q2::r2h//0002::r2h//00000r!   x_rawrN   r   c                     |D ]y}|                     ||          }t          t          |                    t          |          k    sJ t          t          ||                    t          |          k    sJ zdS )z(Test input device propagation to output.)devicerG   N)r   r   r   )r;   r   r   devicesdr   s         r   test_devicezTestLogSumExp.test_device(  s      	@ 	@A

5
++AYq\\**ill::::YqA...//9Q<<?????	@ 	@r!   c                 h   |                     g d          }|                     g d          }t          t          ||          t          ||d          d                    |                     g d          }t          t          ||          |                     |j                             d S )N)grC@g X?g	ml@)_+J?eY@g|H4rG   TrL   r   )r   r   gR%)r   r   r   r8   rk   s       r   test_gh22903zTestLogSumExp.test_gh229030  s     JJ;;;<<JJ<<<==	!q)))9Q!+N+N+Nq+QRRR JJ<<<==	!q)))2::bf+=+=>>>>>r!   N) __name__
__module____qualname__rC   rJ   rR   rV   rb   rg   ri   rl   rp   pytestmarkparametrizeru   rw   dtypesr}   r   r   r   r   itproductr9   r1   complexr   r   r   r    r!   r   r#   r#       s       
0G 0G 0GdU U U*, , ,  + + +
8 
8 
8! ! !; ; ;   [UQ			N33K K 43K/ / /
 [Wf--/ / .-/ [Y//[Y//4 4 0/ 0/4(" " " [W{L&ABB. . CB.0H H H [UJBJVGFGRVGR  GRVGS!!GRVGRV$$GRVGbfW%%GBFBGBFC  GBFBF##GBFRVG$$GRVGV$$GRVGV$$GRVGV$$GRVGV$$GBFF##GBFF##GBFF##GBFF##'	
( +% % %  ." "/ ."1 1 1 [WsD"o66@ @ 76@? ? ? ? ?r!   r#   c                   p    e Zd Zd Zd Zej                            dd          d             Zd Z	d Z
d	S )
TestSoftmaxc                 t   t          t          |                    g d                    |                    g d          d           t          t          |                    ddg                    |                    ddg          d           t          t          |                    ddg                    |                    dt          j        g          dt          j        z   z  d           |                    d	|j        
          }|                    g d|j        
          }t          t          |          |d           t          t          |dz             |d           t          t          |                    |d                    |                    |d          d           d S )N)r(   rE   rE   rE   rN   rE   rE   rE   vIh%<=r   rN         ?rE   r   r[   r&   )g*lI9i?g{O?gW-R?gI?r   rY   rY   )r   r   r   r9   er2   r   reshape)r;   r   r   expecteds       r   test_softmax_fixturesz!TestSoftmax.test_softmax_fixturesA  s   

+>+>+> ? ?@@

#3#3#3445	B 	B 	B 	B

B8 4 455

B8,,5	: 	: 	: 	:

B8 4 455

B:..BD9"	$ 	$ 	$ 	$ IIarzI**:: 3 3 3 ;=*  F F
 	

H59999 	C(((???? 	

1f 5 566

8V445	B 	B 	B 	B 	B 	Br!   c           	         t          t          |                    ddgddgg          d          |                    ddgddgg          d           t          t          |                    ddgddgg          d          |                    d	dgd	dgg          d           |                    g d
g dg          }|                    g dg dg          }t          t          |d          |d           t          t          |j        d          |j        d           |                    |d          }t          t          |d          |                    |d          d           d S )Nr(   rE   r   r-   r   r   r   r   rN   )g      9rE   g      9@g      I@)rN   g     Pt@g     h@g     p@)g	+9g.K|T}%m;g]7=g\?)rE   gpk&gTV6?gd?rY   rY   rY   r   rY   )r   r   r   Tr   )r;   r   r   r   x3ds        r   test_softmax_multi_axesz#TestSoftmax.test_softmax_multi_axes]  s   

UBK%+E F FQOOO

RHr2h#788u	F 	F 	F 	F

UBK%+E F FQOOO

RHr2h#788u	F 	F 	F 	F
 JJ0000002 3 3::  3  3  3 4  4  4	5 6 6 	***H5AAAA!,,,hjuEEEE jjI&&&111

8Y77e	E 	E 	E 	E 	E 	Er!   array_api_strictint->float promotionreasonc                     t          t          |                    g d                    |                    g d          d           d S N)r*   r   r   r   r   r   r   )r   r   r   r;   r   s     r   test_softmax_int_arrayz"TestSoftmax.test_softmax_int_arrayw  s[    

??? ; ;<<

#3#3#3445	B 	B 	B 	B 	B 	Br!   c                 h    t          t          d          t          j        d          d           d S )Nr*   rN   r   r   r   r   r9   r   r;   s    r   test_softmax_scalarzTestSoftmax.test_softmax_scalar|  s+    rz"~~EBBBBBBr!   c                 p    t          t          g d          t          j        g d          d           d S r   r   r   s    r   test_softmax_array_likez#TestSoftmax.test_softmax_array_like  sM    00
#3#3#3445	B 	B 	B 	B 	B 	Br!   N)r   r   r   r   r   r   r   xfail_xp_backendsr   r   r   r   r!   r   r   r   ?  s        B B B8E E E4 [""#5>T"UUB B VUBC C CB B B B Br!   r   c                      e Zd Zd Zej                            dd          d             Zd Zd Z	e
d             Ze
d	             Zej                            d
ddg          d             Zd Zej                            dd ej        d           ej        d          z  fdddgddggfg          d             Zd Zd Zd ZdS )TestLogSoftmaxc                     t          t          |                    ddg                    |                    ddg          d           d S )Nr(   rN   rE        8r   r   r   r
   r   r   s     r   test_log_softmax_basicz%TestLogSoftmax.test_log_softmax_basic  sR    BJJr{$;$;<<

B;//e	= 	= 	= 	= 	= 	=r!   r   r   r   c                     t          t          |                    ddg                    |                    ddg          d           d S Nr*   r   rE   r   r   r   r   r   s     r   test_log_softmax_int_arrayz)TestLogSoftmax.test_log_softmax_int_array  sR    BJJay$9$9::

B;//e	= 	= 	= 	= 	= 	=r!   c                 D    t          t          d          dd           d S )NrN   rE   r   r   )r   r
   r   s    r   test_log_softmax_scalarz&TestLogSoftmax.test_log_softmax_scalar  s%    C((#E::::::r!   c                 p    t          t          ddg          t          j        ddg          d           d S r   )r   r
   r9   r   r   s    r   test_log_softmax_array_likez*TestLogSoftmax.test_log_softmax_array_like  sD    T1I..
B;//e	= 	= 	= 	= 	= 	=r!   c                 ~    |                      d| j                  }g d}||                     || j                  fS )Nr[   r&   g:-g:-guZgi,ܿ)r2   r   r   r   r   expects      r   data_1dzTestLogSoftmax.data_1d  sI    IIarzI**( ( ( "**V2:*6666r!   c                     |                      |                     d| j                  d          }g dg dg}||                     || j                  fS )N   r&   )rY   r[   r   )r   r2   r   r   r   s      r   data_2dzTestLogSoftmax.data_2d  sk    JJryy"*y55v>>) ) )) ) )	* "**V2:*6666r!   offsetr   r   c                 ~    |                      |          \  }}||z  }t          t          |          |d           d S )Nr   r   )r   r   r
   )r;   r   r   r   r   s        r   test_log_softmax_translationz+TestLogSoftmax.test_log_softmax_translation  sC     LL$$	6	VAU;;;;;;r!   c                     |                      |          \  }}|                    |d          }|                    |d          }t          t          |          |d           d S )Nr   r   r   )r   r   r   r
   r;   r   r   r   s       r   test_log_softmax_noneaxisz(TestLogSoftmax.test_log_softmax_noneaxis  s`     LL$$	6JJq&!!FF++AU;;;;;;r!   zaxis_2d, expected_2dr   r   r   rE   r   c                     |                     ddgddgg          }t          t          ||          |                     ||j                  d           d S )Nr(   rN   r-   r&   r   r   )r   r   r
   r'   )r;   axis_2dexpected_2dr   r   s        r   	test_axeszTestLogSoftmax.test_axes  so    
 JJeR[122AG444

;ag
>>U	L 	L 	L 	L 	L 	Lr!   c                 x    |                      |          \  }}t          t          |d          |d           d S )Nr   r-   r   r   )r   r   r
   r   s       r   test_log_softmax_2d_axis1z(TestLogSoftmax.test_log_softmax_2d_axis1  s?    LL$$	6AA...UCCCCCCr!   c                     |                      |          \  }}t          t          |j        d          |j        d           d S )Nr   r-   r   r   )r   r   r
   r   r   s       r   test_log_softmax_2d_axis0z(TestLogSoftmax.test_log_softmax_2d_axis0  sC    LL$$	6ACa000&(GGGGGGr!   c                     |                      |          \  }}|                    |d          }|                    |d          }t          t          |d          |d           d S )Nr   r   r-   r   r   )r   r   r   r
   r   s       r   test_log_softmax_3dz"TestLogSoftmax.test_log_softmax_3d  se    LL$$	6JJq)$$FI..AF333V%HHHHHHr!   N)r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r9   r3   r_   r   r   r   r  r   r!   r   r   r     s       = = = [""#5>T"UU= = VU=; ; ;= = = 7 7 \7 7 7 \7 [X3x00< < 10<< < < [3	
FBF3KK'"'&//)*	
b%[2u+&'6  L L	 L
D D DH H HI I I I Ir!   r   )	itertoolsr   r   r   numpyr9   scipy._lib._array_apir   r   r   r   scipy._lib._array_api_no_0dr   r   r	   scipy.specialr
   r   r   scipy.special._logsumexpr   r   integral_dtypesr    r   filterwarningsr#   r   r   r   r!   r   <module>r     sQ            @ @ @ @ @ @ @ @ @ @ @ @9 9 9 9 9 9 9 9 9 9 : 9 9 9 9 9 9 9 9 9 2 2 2 2 2 2 
M	L	LG$& & & MNNNOOHII9X? X? X? X? X? X? X?  JI PO ONX?v 7AB AB AB AB AB AB AB ABH ;PI PI PI PI PI PI PI  PI PI PIr!   