
    -ipI                        S SK rS SKrS SKrS SKrS SKJrJrJ	r	J
r
  S SKJrJrJr  S SKJrJrJr  S SKJr  / SQrSS/rS	 r\R0                  R3                  S
5      \R0                  R3                  S5      \R0                  R3                  S5      \" \5       " S S5      5       5       5       5       r\" \5       " S S5      5       r\" \5       " S S5      5       rg)    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                    U R                  [        R                  * S-
  [        R                  * SSSSS[        R                  [        R                  S-   /	5      nU R                  [        R                  S-
  [        R                  SSSSS[        R                  [        R                  * S-   /	5      n[        XS9n[	        X2SS9  g )N   gYnr   gYn)xp)atol)asarraymathpir   r   )r   xrefress       U/var/www/html/venv/lib/python3.13/site-packages/scipy/special/tests/test_logsumexp.pytest_wrap_radiansr       s    


TWWHQJ"gvq$''477196 	7A
**dggai"gvq$''DGG8A:7 8C

!CC1%    z/ignore:invalid value encountered:RuntimeWarningz0ignore:divide by zero encountered:RuntimeWarningz*ignore:overflow encountered:RuntimeWarningc                   @   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  R                  SS/ SQ45      S 5       rS r\R                  R                  S\5      S 5       r\R                  R                  S\5      \R                  R                  S\5      S 5       5       rS r\R                  R                  SSS/5      S 5       rS r\R                  R                  S\R2                  " \R6                  * \R6                  \" \R6                  * S5      \" \R6                  * S5      \" \R6                  * \R6                  5      \" \R6                  * \R6                  * 5      \" \R6                  S5      \" \R6                  S5      \" \R6                  \R6                  5      \" \R6                  \R6                  * 5      \" \R6                  * S5      \" \R6                  * S5      \" \R6                  * S5      \" \R6                  * S 5      \" \R6                  S5      \" \R6                  S5      \" \R6                  S5      \" \R6                  S 5      /S!S"95      S# 5       rS$ r\R                  R                  S%S&S'/ /5      S( 5       rS) r S*r!g+),TestLogSumExp    c           	         UR                  / 5      nUR                  UR                  * 5      n[        [        U5      U5        UR	                  SUR
                  S9nUR                  UR                  UR                  U5      5      5      n[        [        U5      U5        UR                  SS/5      nUR                  S[        R                  " S5      -   5      n[        [        U5      U5        SnUR                  U4S5      nUR                  S[        R                  " U5      -   5      n[        [        U5      U5        UR                  S/S	-  5      nUR                  U5      nUR                  Xf/5      nUR                  Xw/5      n	[        UR                  [        U	5      5      UR                  U5      5        [        UR                  [        U	S
S95      UR                  US
S95        [        UR                  [        U	SS95      UR                  USS95        UR                  UR                  /5      n
UR                  UR                  /5      n[        [        U
5      U
S
   5        [        [        U
* 5      U
S
   * 5        [        [        U5      US
   5        [        [        UR                  UR                  * UR                  * /5      5      U
S
   * 5        UR                  SS/S[        R                  * //5      nUR                  SS/5      n[        [        USS9U5        UR                  USS9n[        [        USSS9U5        [        [        USS9UR                  S5      5        g )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logXr2   r9   r   s                r   test_logsumexpTestLogSumExp.test_logsumexp%   s   JJrN**bffW%	!g. IId"**I-&&q	*+	!g. JJu~&**Vdhhsm34	!g.GGQD% **Wtxx{23	!g.JJw()vvayHHaVxx%y/;yA679JKyA679JK jj"&&"jj"&&"	#A/	3$#a&1	#A/	"**rvvgw-?"@ACF7K JJu(* +jj$'	!"-s3 nnSrn*	!"t<cB 		!(3RZZ5EFr!   c           
         UR                  SUR                  S9nUR                  SSS5      nUR                  UR                  X1R	                  U5      -  5      5      n[        [        X#S9U5        UR                  SS/5      nUR                  SS/5      nUR                  S[        R                  " S5      -   5      n[        [        X#S9U5        UR                  S	/S
-  5      nUR                  SSS
5      nUR                  U5      nUR                  XU45      nUR                  Xf45      nUR                  X345      n	[        UR	                  [        XS95      UR                  X-  5      5        [        UR	                  [        XSS95      UR                  X-  SS95        [        UR	                  [        XSS95      UR                  X-  SS95        g )Nr&   r'                 r?   r+   g333333?g333333@r-   i r   r   )r?   r/   r.   )r3   r   r4   r5   r6   r   r   r   r   linspacer8   )
r<   r   r=   r?   r>   r   rA   rB   rC   Bs
             r   test_logsumexp_bTestLogSumExp.test_logsumexp_bW   s   IId"**I-IIdB$&&&&),-	!)73JJd|$JJSz"**TDHHW$556	!)73JJw'(KK4(vvayHHaVxx%HHaVy34bffQUmDy;<bffQUQRf>STy;<bffQUQRf>STr!   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#SS9u  pE[        XAR                  S5      5        [        XQR                  S5      5        g )N)r   r   r   )r   r   r   Tr?   return_sign      ?rH   )r   r   r   r   r<   r   r=   r?   rss         r   test_logsumexp_sign!TestLogSumExp.test_logsumexp_signl   sL    JJy!JJ{#T2::b>*::c?+r!   c                     UR                  SS/5      nUR                  SS/5      n[        X#SS9u  pEUR                  U5      (       a   eUR                  U5      (       a   eUS:  d   eUS:X  d   eg )Nr   r   TrO   r   )r   r   isfiniteisnanrR   s         r   test_logsumexp_sign_zero&TestLogSumExp.test_logsumexp_sign_zerot   so    JJ1vJJ2wT2;;q>>!!88A;;1uuAvvr!   c                    UR                  S5      nUR                  U5      n[        USUSS9u  pEUR                  UR                  s=:X  a  S:X  d   e   e[        USUSS9u  pEUR                  UR                  s=:X  a  S:X  d   e   eg )Nr            r^   T)r/   r?   rP   r   r^   r`   r   r_   ones	ones_liker   shaperR   s         r   test_logsumexp_sign_shape'TestLogSumExp.test_logsumexp_sign_shape~   s    GGL!LLOaT:ww!''.Y.....1$?ww!''*U*****r!   c                     UR                  / SQ5      n[        USS9u  p4UR                  UR                  U5      5      nXQR	                  U5      -  n[        XF5        [        XAR                  U5      -  U5        g )N)y      ?      ?y       @      y             @T)rP   )r   r   r5   r6   absr   )r<   r   r=   rS   rT   expected_sumexpexpected_signs          r   test_logsumexp_complex_sign)TestLogSumExp.test_logsumexp_complex_sign   sb    JJ01-&&+'&&*AA)FF1I7r!   c                     UR                  S5      nUR                  U5      n[        USUS9nUR                  S:X  d   e[        USUS9nUR                  S:X  d   eg )Nr]   r^   )r/   r?   ra   rb   rc   )r<   r   r=   r?   rS   s        r   test_logsumexp_shape"TestLogSumExp.test_logsumexp_shape   s]    GGL!LLOaa1%ww)###af*ww&   r!   c                     UR                  SS/5      nUR                  SS/5      n[        [        X#S9UR                  S5      5        g )Nr   r,   r   rI   rQ   )r   r   r   r<   r   r=   r?   s       r   test_logsumexp_b_zero#TestLogSumExp.test_logsumexp_b_zero   s=    JJ5z"JJ1v	!)2::b>:r!   c                 Z    UR                  S5      nUR                  S5      n[        X#S9  g )N)r`   r   r^   r   )r_   r      rI   )zerosrd   r   rs   s       r   test_logsumexp_b_shape$TestLogSumExp.test_logsumexp_b_shape   s&    HH\"GGI!r!   argr   )r   r^   r_   c                     [        U5      [        [        R                  " [        R                  " U5      5      5      :X  d   eg N)r   r:   r   
atleast_1d)r<   r{   s     r   test_xp_invalid_input#TestLogSumExp.test_xp_invalid_input   s+    ~2::bmmC6H+I!JJJJr!   c                     SS/n[         R                  " S[        R                  " S5      -   5      n[	        [        U5      U5        g )Nr+   r)   r*   )r:   r   r   r4   r   r   )r<   r=   r>   s      r   test_array_likeTestLogSumExp.test_array_like   s4    4L**Vdhhsm34	!g.r!   r(   c                    [        X!5      nUR                  SS/US9nUR                  US5      (       a  UR                  S5      R                  OUnUR                  S[        R
                  " S5      -   US9n[        [        U5      U5        g )Nr)   r'   integralrQ   r*   )getattrr   isdtyper(   r   r4   r   r   )r<   r(   r   r=   desired_dtyper>   s         r   test_dtypes_aTestLogSumExp.test_dtypes_a   sx    "JJu~UJ313E:1N1NB--# 	**Vdhhsm3=*I	!g.r!   dtype_adtype_bc                    [        X15      n[        X25      nUR                  SS/US9nUR                  SS/US9n[        U5      (       au  XE4 Vs/ s H  nUR                  US5      (       a  M  UPM      n	n[	        U	5      S:  a*  U	R                  UR                  S5      R                  5        UR                  " U	6 n
O3UR                  XE5      n
UR                  U
S5      (       a  [        U5      n
UR                  [        R                  " [        R                  " S5      [        R                  " S5      -
  5      U
S9n[        [        XgS9U5        g s  snf )Nr^   r   r'   r   r   rQ   rI   )r   r   r   r   lenappendr(   result_typer   r   r4   r6   r   r   )r<   r   r   r   
xp_dtype_a
xp_dtype_br=   r?   r(   xp_float_dtypesr   r>   s               r   test_dtypes_abTestLogSumExp.test_dtypes_ab   s&    R)
R)
JJ1vZJ0JJ2wjJ1r"" 4>2J E2J&(jj
&C  %2JO E?#a'&&rzz"~';';<NNO<MNN:BMzz-44/3}**TXXdhhqkDHHQK&?@*V	!)73Es   E/Ec                     UR                  SS/5      n[        U5      nUR                  US   US   5      n[        X45        g )NrG   g      Dr   r   )r   r   	logaddexpr   )r<   r   r=   r   r   s        r   test_gh18295TestLogSumExp.test_gh18295   s?     JJU|$lll1Q41&!r!   r   r   c                 6   [         R                  R                  S5      n[        X5      nSnUR	                  SSU5      SUR	                  SSU5      -  -   nUR                  XRS9n[        USS9nUR                  UR                  UR                  U5      SS95      nUR                  UR                  U5      UR                  5      n[        UR                  UR                  U5      5      U5        [        Xg5        [        USSS	9u  pUR                  UR                  U5      SS9n[        UR                  UR                  U
5      5      U5        [        XR!                  UR                  U5      5      5        [        XUR                  U5      -  5        g )
Nl   &DN$)
   d   r   (                 ?r'   r.   T)rP   r/   )r:   randomdefault_rngr   uniformr   r   r4   r5   r6   	full_likeimagr   r	   rj   r   real)r<   r   r(   rngrf   r   r   r   maxoutsgns              r   test_gh21610TestLogSumExp.test_gh21610   sA    ii##$67"KK2u%ckk!R.G(GGJJqJ&"ffRVVBFF1IAV./ll2773</rvvbggcl+S1!QDq9ffRVVAYQf'rvvbggcl+S1WWRVVC[12_-r!   c                 
   UR                  SS/5      n[        U5      nUR                  S5      n[        UR                  U5      UR                  U5      5        [        UR	                  U5      UR	                  U5      SSS9  g )Nr   y        y<y9B.?i<gV瞯<)r   rtol)r   r   r   r   r   )r<   r   r   r   r   s        r   test_gh21709_small_imaginary*TestLogSumExp.test_gh21709_small_imaginary   sj     JJ567l
 jjCDbggcl3bggclGr!   zx,yrG   g       g%u?g}b@g"~j@gH@r^   )repeatc           
          [        UR                  X/5      5      nUR                  UR                  UR	                  UR                  X/5      5      5      5      n[        XE5        g r}   )r   r   r4   r5   r6   r   )r<   r   yr   r   r   s         r   test_gh22601_infinite_elements,TestLogSumExp.test_gh22601_infinite_elements  sL    4 

A6*+ffRVVBFF2::qf#5678!r!   c                     UR                  SS/5      nUR                  SS/5      n[        U5        [        X#S9  [        X!R                  SS/5      5        [        X1R                  SS/5      5        g)zFTest that logsumexp doesn't accidentally write back to its parameters.g      @g      @g      @r*   rI   N)r   r   r   rs   s       r   test_no_writebackTestLogSumExp.test_no_writeback  s_    JJBx JJBx !!::r2h/0::r2h/0r!   x_rawrQ   r   c                     U HV  nUR                  XS9n[        [        U5      5      [        U5      :X  d   e[        [        XUS95      [        U5      :X  a  MV   e   g)z(Test input device propagation to output.)devicerI   N)r   r   r   )r<   r   r   devicesdr   s         r   test_deviceTestLogSumExp.test_device(  sU     A

5
+AYq\*il:::Yq./9Q<??? r!   c           	      
   UR                  / SQ5      nUR                  / SQ5      n[        [        X#S9[        X#SS9S   5        UR                  / SQ5      n[        [        X#S9UR                  UR                  5      5        g )N)grC@g X?g	ml@)_+J?eY@g|H4rI   TrO   r   )r   r   gR%)r   r   r   r9   rs   s       r   test_gh22903TestLogSumExp.test_gh229030  sj     JJ;<JJ<=	!)9Q+Nq+QR JJ<=	!)2::bff+=>r!    N)"__name__
__module____qualname____firstlineno__rD   rL   rU   rZ   rg   rm   rp   rt   ry   pytestmarkparametrizer   r   dtypesr   r   r   r   r   itproductr:   r2   complexr   r   r   r   __static_attributes__r   r!   r   r#   r#       s   
0GdU*,+
8!; [[UQ	N3K 4K/
 [[Wf-/ ./ [[Y/[[Y/4 0 04(" [[W{L&AB. C.0H [[UBJJVVGFFRVVGR RVVGS!RVVGRVV$RVVGbffW%BFFBBFFC BFFBFF#BFFRVVG$RVVGV$RVVGV$RVVGV$RVVGV$BFFF#BFFF#BFFF#BFFF#'	
( +% ."/."1 [[WsD"o6@ 7@?r!   r#   c                   l    \ rS rSrS rS r\R                  R                  SSS9S 5       r	S r
S	 rS
rg)TestSoftmaxi?  c                    [        [        UR                  / SQ5      5      UR                  / SQ5      SS9  [        [        UR                  SS/5      5      UR                  SS/5      SS9  [        [        UR                  SS/5      5      UR                  S[        R                  /5      S[        R                  -   -  SS9  UR                  S	UR                  S
9nUR                  / SQUR                  S
9n[        [        U5      USS9  [        [        US-   5      USS9  [        [        UR                  US5      5      UR                  US5      SS9  g )N)r)   rG   rG   rG   rQ   rG   rG   rG   vIh%<=r   rQ         ?rG   r   r`   r'   )g*lI9i?g{O?gW-R?gI?r   r^   r^   )r   r   r   r:   er3   r   reshape)r<   r   r   expecteds       r   test_softmax_fixtures!TestSoftmax.test_softmax_fixturesA  s)   

+> ?@

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

B8 45

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

B8 45

B:.BDD9"	$ IIarzzI*:: 3 ;=**  F
 	
H59 	C((? 	

1f 56

8V45	Br!   c           	      2   [        [        UR                  SS/SS//5      SS9UR                  SS/SS//5      SS9  [        [        UR                  SS/SS//5      SS9UR                  S	S/S	S//5      SS9  UR                  / S
Q/ SQ/5      nUR                  / SQ/ SQ/5      n[        [        USS9USS9  [        [        UR                  SS9UR                  SS9  UR	                  US5      n[        [        USS9UR	                  US5      SS9  g )Nr)   rG   r   r.   r   r   r   r   rQ   )g      9rG   g      9@g      I@)rQ   g     Pt@g     h@g     p@)g	+9g.K|T}%m;g]7=g\?)rG   gpk&gTV6?gd?r^   r^   r^   r   r^   )r   r   r   Tr   )r<   r   r   r   x3ds        r   test_softmax_multi_axes#TestSoftmax.test_softmax_multi_axes]  s$   

UBK%+E FQO

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

UBK%+E FQO

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

8Y7e	Er!   array_api_strictint->float promotionreasonc                 p    [        [        UR                  / SQ5      5      UR                  / SQ5      SS9  g N)r+   r   r   r   r   r   r   )r   r   r   r<   r   s     r   test_softmax_int_array"TestSoftmax.test_softmax_int_arrayw  s*    

? ;<

#345	Br!   c                 T    [        [        S5      [        R                  " S5      SS9  g )Nr+   rQ   r   r   r   r   r:   r   r<   s    r   test_softmax_scalarTestSoftmax.test_softmax_scalar|  s    rzz"~EBr!   c                 \    [        [        / SQ5      [        R                  " / SQ5      SS9  g r   r   r   s    r   test_softmax_array_like#TestSoftmax.test_softmax_array_like  s!    0

#345	Br!   r   N)r   r   r   r   r   r   r   r   xfail_xp_backendsr   r   r   r   r   r!   r   r   r   ?  sG    B8E4 [[""#5>T"UB VBCBr!   r   c                      \ rS rSrS r\R                  R                  SSS9S 5       rS r	S r
\S	 5       r\S
 5       r\R                  R                  SSS/5      S 5       rS r\R                  R                  SS\R$                  " S5      \R&                  " S5      -  4SSS/SS//4/5      S 5       rS rS rS rSrg)TestLogSoftmaxi  c                 p    [        [        UR                  SS/5      5      UR                  SS/5      SS9  g )Nr)   rQ   rG        8r   r   r   r
   r   r   s     r   test_log_softmax_basic%TestLogSoftmax.test_log_softmax_basic  s0    BJJr{$;<

B;/e	=r!   r   r   r   c                 p    [        [        UR                  SS/5      5      UR                  SS/5      SS9  g Nr+   r   rG   r   r   r   r   r   s     r   test_log_softmax_int_array)TestLogSoftmax.test_log_softmax_int_array  s0    BJJay$9:

B;/e	=r!   c                 ,    [        [        S5      SSS9  g )NrQ   rG   r   r   )r   r
   r   s    r   test_log_softmax_scalar&TestLogSoftmax.test_log_softmax_scalar  s    C(#E:r!   c                 \    [        [        SS/5      [        R                  " SS/5      SS9  g r   )r   r
   r:   r   r   s    r   test_log_softmax_array_like*TestLogSoftmax.test_log_softmax_array_like  s'    T1I.

B;/e	=r!   c                 r    U R                  SU R                  S9n/ SQnXR                  X R                  S94$ )Nr`   r'   g:-g:-guZgi,ܿ)r3   r   r   r   r   expects      r   data_1dTestLogSoftmax.data_1d  s9    IIarzzI*( **V::*666r!   c                     U R                  U R                  SU R                  S9S5      n/ SQ/ SQ/nXR                  X R                  S94$ )N   r'   )r^   r`   r  )r   r3   r   r   r	  s      r   data_2dTestLogSoftmax.data_2d  sN    JJryy"**y5v>))	* **V::*666r!   offsetr   r   c                 Z    U R                  U5      u  p4X1-  n[        [        U5      USS9  g )Nr   r   )r  r   r
   )r<   r  r   r   r
  s        r   test_log_softmax_translation+TestLogSoftmax.test_log_softmax_translation  s+     LL$		AU;r!   c                     U R                  U5      u  p#UR                  US5      nUR                  US5      n[        [        U5      USS9  g )Nr   r   r   )r  r   r   r
   r<   r   r   r
  s       r   test_log_softmax_noneaxis(TestLogSoftmax.test_log_softmax_noneaxis  sD     LL$	JJq&!FF+AU;r!   zaxis_2d, expected_2dr   r   r   rG   r   c                     UR                  SS/SS//5      n[        [        XAS9UR                  X$R                  S9SS9  g )Nr)   rQ   r.   r'   r   r   )r   r   r
   r(   )r<   axis_2dexpected_2dr   r   s        r   	test_axesTestLogSoftmax.test_axes  sC    
 JJeR[12A4

;gg
>U	Lr!   c                 P    U R                  U5      u  p#[        [        USS9USS9  g )Nr   r.   r   r   )r  r   r
   r  s       r   test_log_softmax_2d_axis1(TestLogSoftmax.test_log_softmax_2d_axis1  s%    LL$	AA.UCr!   c                 x    U R                  U5      u  p#[        [        UR                  SS9UR                  SS9  g )Nr   r.   r   r   )r  r   r
   r   r  s       r   test_log_softmax_2d_axis0(TestLogSoftmax.test_log_softmax_2d_axis0  s-    LL$	ACCa0&((Gr!   c                     U R                  U5      u  p#UR                  US5      nUR                  US5      n[        [        USS9USS9  g )Nr   r   r.   r   r   )r  r   r   r
   r  s       r   test_log_softmax_3d"TestLogSoftmax.test_log_softmax_3d  sE    LL$	JJq)$FI.AF3V%Hr!   r   N)r   r   r   r   r   r   r   r   r   r  r  staticmethodr  r  r   r  r  r:   r4   rd   r  r  r"  r%  r   r   r!   r   r   r     s   = [[""#5>T"U= V=;= 7 7 7 7 [[X3x0< 1<< [[3	
BFF3K"''&/)*	
b%[2u+&'6 L	L
DHIr!   r   )	itertoolsr   r   r   numpyr:   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>r0     s       @ @9 9 : 9 2 
MG$& MNNOHI9X? X?  J P OX?v 7AB AB ABH ;PI PI  PIr!   