
    CpjK                        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\R.                  R1                  S	S
S9S 5       r\R.                  R5                  S5      \R.                  R5                  S5      \R.                  R5                  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   Fprivatereasonc                    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       ^/var/www/html/pdf-tiff/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\" \R4                  " \R8                  * \R8                  \" \R8                  * S5      \" \R8                  * S5      \" \R8                  * \R8                  5      \" \R8                  * \R8                  * 5      \" \R8                  S5      \" \R8                  S5      \" \R8                  \R8                  5      \" \R8                  \R8                  * 5      \" \R8                  * S5      \" \R8                  * S5      \" \R8                  * S5      \" \R8                  * S 5      \" \R8                  S5      \" \R8                  S5      \" \R8                  S5      \" \R8                  S 5      /S!S"95      5      S# 5       rS$ r\R                  R                  S%S&S'/ /5      S( 5       r S) r!\R                  R                  S*\R8                  /S+S&4\R8                  /S,/S,4/5      S- 5       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)r2   keepdims)r   )r   infr   r   aranger   logsumexpr   r   fullstacknannpexpand_dims)selfr   adesiredbnr   logxXlogXr5   r<   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*                 rB   r.   g333333?g333333@r0   i r   r   )rB   r2   r1   )r6   r   r7   r8   r9   r   r   r   r   linspacer;   )
r?   r   r@   rB   rA   r   rD   rE   rF   Bs
             r"   test_logsumexp_bTestLogSumExp.test_logsumexp_bX   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rB   return_sign      ?rK   )r   r   r   r   r?   r   r@   rB   rss         r"   test_logsumexp_sign!TestLogSumExp.test_logsumexp_signm   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   TrR   r   )r   r   isfiniteisnanrU   s         r"   test_logsumexp_sign_zero&TestLogSumExp.test_logsumexp_sign_zerou   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            ra   T)r2   rB   rS   r   ra   rc   r   rb   ones	ones_liker   shaperU   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)rS   )r   r   r8   r9   absr   )r?   r   r@   rV   rW   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`   ra   )r2   rB   rd   re   rf   )r?   r   r@   rB   rV   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   rL   rT   )r   r   r   r?   r   r@   rB   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)rc   r   ra   r   )rb   r      rL   )zerosrg   r   rv   s       r"   test_logsumexp_b_shape$TestLogSumExp.test_logsumexp_b_shape   s&    HH\"GGI!r$   argr   )r   ra   rb   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   r7   r   r   )r?   r@   rA   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*   integralrT   r-   )getattrr   isdtyper+   r   r7   r   r   )r?   r+   r   r@   desired_dtyperA   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 )Nra   r   r*   r   r   rT   rL   )r   r   r   r   lenappendr+   result_typer   r   r7   r9   r   r   )r?   r   r   r   
xp_dtype_a
xp_dtype_br@   rB   r+   xp_float_dtypesr   rA   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 )NrJ   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*   r1   T)rS   r2   )r=   randomdefault_rngr   uniformr   r   r7   r8   r9   	full_likeimagr   r	   rm   r   real)r?   r   r+   rngri   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,yrJ   g       g%u?g}b@g"~j@gH@ra   )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   r7   r8   r9   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-   rL   N)r   r   r   rv   s       r"   test_no_writebackTestLogSumExp.test_no_writeback   s_    JJBx JJBx !!::r2h/0::r2h/0r$   x_rawrT   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.)devicerL   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|H4rL   TrR   r   )r   r   gR%)r   r   r   r<   rv   s       r"   test_gh22903TestLogSumExp.test_gh229031  sj     JJ;<JJ<=	!)9Q+Nq+QR JJ<=	!)2::bff+=>r$   za, b, sign_refNrK   c                     UR                  U5      Ub  UR                  U5      OS p2[        X#SS9u  pVUR                  U5      (       d   e[        XaR                  U5      5        g )NTrR   )r   r   isinfr   )r?   r   r@   rB   sign_refvalsigns          r"   test_gh23548TestLogSumExp.test_gh23548?  sR     zz!}q}bjjm$1a$7	xx}}}jj23r$    )$__name__
__module____qualname____firstlineno__rG   rO   rX   r]   rj   rp   rs   rw   r|   pytestmarkparametrizer   r   dtypesr   r   r   r   r   listitproductr=   r5   complexr   r   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 [[UDVVGFFRVVGR RVVGS!RVVGRVV$RVVGbffW%BFFBBFFC BFFBFF#BFFRVVG$RVVGV$RVVGV$RVVGV$RVVGV$BFFF#BFFF#BFFF#BFFF#'	
( +* % ."/."1 [[WsD"o6@ 7@? [[- "xr2 "x#467474r$   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)TestSoftmaxiK  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,   rJ   rJ   rJ   rT   rJ   rJ   rJ   vIh%<=r   rT         ?rJ   r   rc   r*   )g*lI9i?g{O?gW-R?gI?r   ra   ra   )r   r   r   r=   er6   r   reshape)r?   r   r   expecteds       r"   test_softmax_fixtures!TestSoftmax.test_softmax_fixturesM  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,   rJ   r   r1   r   r   r   r   rT   )g      9rJ   g      9@g      I@)rT   g     Pt@g     h@g     p@)g	+9g.K|T}%m;g]7=g\?)rJ   gpk&gTV6?gd?ra   ra   ra   r   ra   )r   r   r   Tr   )r?   r   r   r   x3ds        r"   test_softmax_multi_axes#TestSoftmax.test_softmax_multi_axesi  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 promotionr   c                 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_array  s*    

? ;<

#345	Br$   c                 T    [        [        S5      [        R                  " S5      SS9  g )Nr.   rT   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   K  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,   rT   rJ        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   rJ   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 )NrT   rJ   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$ )Nrc   r*   g:-g:-guZgi,ܿ)r6   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*   )ra   rc   r  )r   r6   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   rJ   r  c                     UR                  SS/SS//5      n[        [        XAS9UR                  X$R                  S9SS9  g )Nr,   rT   r1   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   r1   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   r1   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   r1   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=   r7   rg   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   uses_xp_capabilitiesr#   filterwarningsr&   r   r   r   r$   r"   <module>r:     s"      @ @9 9 : 9 2 
MG$ !!%	!:& ;& MNNOHI9c4 c4  J P Oc4L	 7AB AB ABH ;PI PI  PIr$   