
    e!he3                        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,                  j/                  d      ej,                  j1                  dd      d                      Zeej,                  j/                  d      ej,                  j1                  dd       G d d                           Z G d d      Zy)    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                    | j                  t        j                   dz
  t        j                   dddddt        j                  t        j                  dz   g	      }| j                  t        j                  dz
  t        j                  dddddt        j                  t        j                   dz   g	      }t        ||       }t	        ||d       y )N   gYnr   gYn)atol)asarraymathpir   r   )xpxrefress       j/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/special/tests/test_logsumexp.pytest_wrap_radiansr!      s    
 	

TWWHQJ"gvq$''477196 	7A
**dggai"gvq$''DGG8A:7 8C
2
CC1%    c                   2   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                  j                  d
dg df      ej                  j                  d      d               Zej                  j                  dd      d        Zej                  j                  de      d        Zej                  j                  de      ej                  j                  de      d               Zd Zej                  j                  dddg      d        Zd Zd Zy)TestLogSumExpc                 @   |j                  g       }|j                  |j                         }t        t        |      |       |j	                  d|j
                        }|j                  |j                  |j                  |                  }t        t        |      |       |j                  ddg      }|j                  dt        j                  d      z         }t        t        |      |       d}|j                  |fd      }|j                  dt        j                  |      z         }t        t        |      |       |j                  dgd	z        }|j                  |      }|j                  ||g      }|j                  ||g      }	t        |j                  t        |	            |j                  |             t        |j                  t        |	d
            |j                  |d
             t        |j                  t        |	d            |j                  |d             |j                  |j                  g      }
|j                  |j                  g      }t        t        |
      |
d
          t        t        |
       |
d
           t        t        |      |d
          t        t        |j                  |j                   |j                   g            |
d
           |j                  ddgdt        j                   gg      }|j                  ddg      }t        t        |d      |       t        |      }|j!                  |d      }t        t        |dd      |       t        t        |d      |j                  d             y )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logXr2   r9   r   xp_tests                 r    test_logsumexpz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HHaVxxt%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 "!$!!#B!/	!"t<cB 		!(3RZZ5EFr"   c           	         |j                  d|j                        }|j                  ddd      }|j                  |j                  ||j	                  |      z              }t        t        ||      |       |j                  ddg      }|j                  ddg      }|j                  dt        j                  d      z         }t        t        ||      |       |j                  d	gd
z        }|j                  ddd
      }|j                  |      }|j                  ||f      }|j                  ||f      }|j                  ||f      }	t        |j	                  t        ||	            |j                  |	|z               t        |j	                  t        ||	d            |j                  |	|z  d             t        |j	                  t        ||	d            |j                  |	|z  d             y )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_bzTestLogSumExp.test_logsumexp_bY   s   IId"**I-IIdB$&&"&&),-	!q)73JJd|$JJSz"**TDHHW$556	!q)73JJw'(KK4(vvayHHaVxxt%HHaVy34bffQUmDy;<bffQUQRf>STy;<bffQUQRf>STr"   c                     |j                  g d      }|j                  g d      }t        ||d      \  }}t        ||j                  d             t        ||j                  d             y )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_signz!TestLogSumExp.test_logsumexp_signn   sT    JJy!JJ{#aT212::b>*2::c?+r"   c                     |j                  ddg      }|j                  ddg      }t        ||d      \  }}|j                  |      rJ |j                  |      rJ |dk  sJ |dk(  sJ y )Nr   r   TrN   r   )r   r
   isfiniteisnanrQ   s         r    test_logsumexp_sign_zeroz&TestLogSumExp.test_logsumexp_sign_zerov   so    JJ1vJJ2waT21;;q>!!88A;1uuAvvr"   c                     |j                  d      }|j                  |      }t        |d|d      \  }}|j                  |j                  cxk(  rdk(  sJ  J t        |d|d      \  }}|j                  |j                  cxk(  rdk(  sJ  J y )Nr            r[   T)r/   r?   rO   r   r[   r]   r   r\   ones	ones_liker
   shaperQ   s         r    test_logsumexp_sign_shapez'TestLogSumExp.test_logsumexp_sign_shape   s    GGL!LLOaT:1ww!''.Y.....1$?1ww!''*U*****r"   c                    |j                  g d      }t        |d      \  }}|j                  |j                  |            }||j	                  |      z  }t        ||       t        ||j                  |      z  |       y )N)y      ?      ?y       @      y             @T)rO   )r   r
   r5   r6   absr   )r<   r   r=   rR   rS   expected_sumexpexpected_signs          r    test_logsumexp_complex_signz)TestLogSumExp.test_logsumexp_complex_sign   sj    JJ01-1&&+'"&&*AA=)BFF1I7r"   c                     |j                  d      }|j                  |      }t        |d|      }|j                  dk(  sJ t        |d|      }|j                  dk(  sJ y )NrZ   r[   )r/   r?   r^   r_   r`   )r<   r   r=   r?   rR   s        r    test_logsumexp_shapez"TestLogSumExp.test_logsumexp_shape   s]    GGL!LLOaa1%ww)###af*ww&   r"   c                     |j                  ddg      }|j                  ddg      }t        t        ||      |j                  d             y )Nr   r,   r   rI   rP   )r   r   r
   r<   r   r=   r?   s       r    test_logsumexp_b_zeroz#TestLogSumExp.test_logsumexp_b_zero   s?    JJ5z"JJ1v	!q)2::b>:r"   c                 b    |j                  d      }|j                  d      }t        ||       y )N)r]   r   r[   r   )r\   r      rI   )zerosra   r
   rm   s       r    test_logsumexp_b_shapez$TestLogSumExp.test_logsumexp_b_shape   s(    HH\"GGI!qr"   argr   )r   r[   r\   T)np_onlyc                     t        |      t        t        j                  t        j                  |                  k(  sJ y )N)r
   r:   r   
atleast_1d)r<   rs   r   s      r    test_xp_invalid_inputz#TestLogSumExp.test_xp_invalid_input   s-     ~2::bmmC6H+I!JJJJr"   z#Lists correspond with NumPy backend)rt   r   c                     ddg}|j                  dt        j                  d      z   t        j                        }t        t        |      |       y )Nr+   r)   r*   r'   )r   r   r4   r:   r   r   r
   )r<   r   r=   r>   s       r    	test_listzTestLogSumExp.test_list   s>     4L**Vdhhsm32::*F	!g.r"   r(   c                 6   t        ||      }|j                  ddg|      }t        |      }|j                  |d      r|j                  d      j                  n|}|j                  dt        j                  d      z   |      }t        t        |      |       y )Nr)   r'   integralrP   r*   )	getattrr   r   isdtyper(   r   r4   r   r
   )r<   r(   r   r=   rD   desired_dtyper>   s          r    test_dtypes_azTestLogSumExp.test_dtypes_a   s    E"JJu~UJ3!!$18
1SB--# 	**Vdhhsm3=*I	!g.r"   dtype_adtype_bc                    t        ||      }t        ||      }|j                  ddg|      }|j                  ddg|      }t        ||      }t        |      rk||fD 	cg c]  }	|j	                  |	d      s|	 }
}	t        |
      dk  r*|
j                  |j                  d      j                          |j                  |
 }n|j                  |||j                        }|j                  t        j                  t        j                  d      t        j                  d      z
        |      }t        t        ||      |       y c c}	w )Nr[   r   r'   r   r{   rP   rI   )r|   r   r   r   r}   lenappendr(   result_typer   r   r4   r6   r   r
   )r<   r   r   r   
xp_dtype_a
xp_dtype_br=   r?   rD   r(   xp_float_dtypesr~   r>   s                r    test_dtypes_abzTestLogSumExp.test_dtypes_ab   s*    R)
R)
JJ1vZJ0JJ2wjJ1!!Q'r"3=z2J J&-ooeZ&H  % JO J?#a'&&rzz"~';';</G//AM $//
J

SM**TXXdhhqkDHHQK&?@*V	!q)73Js    E	c                     |j                  ddg      }t        |      }|j                  |d   |d         }t        ||       y )NrG   g      Dr   r   )r   r
   	logaddexpr   )r<   r   r=   r   r   s        r    test_gh18295zTestLogSumExp.test_gh18295   sA     JJU|$lll1Q41&S!r"   r   r   c                 ~   t         j                  j                  d      }t        ||      }d}|j	                  dd|      d|j	                  dd|      z  z   }|j                  ||      }t        |d      }|j                  |j                  |j                  |      d            }|j                  |j                  |      |j                  |j                              }t        |j                  |j                  |            |       t        ||       t        |dd	      \  }	}
|j                  |j                  |      d      }t        |j                  |j                  |
            |       t        |	|j!                  |j                  |                   t        |
||j                  |      z         y )
Nl   &DN$)
   d   r   (   y              ?r'   r.   T)rO   r/   )r:   randomdefault_rngr|   uniformr   r
   r4   r5   r6   	full_likeimagr   r	   rf   r   real)r<   r   r(   rngrc   r   r   r   maxoutsgns              r    test_gh21610zTestLogSumExp.test_gh21610   sV    ii##$67E"KK2u%ckk!R.G(GGJJqJ&"ffRVVBFF1IAV./ll2773<BEE):;rvvbggcl+S1S!QDq9SffRVVAYQf'rvvbggcl+S1RWWRVVC[12S_-r"   c                    |j                  ddg      }t        |      }|j                  d      }t        |j                  |      |j                  |             t        |j	                  |      |j	                  |      dd       y )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   sj     JJ567l
 jjCDbggcl3bggclGr"   c                 "   |j                  g d      }|j                  g d      }t        t        ||      t        ||d      d          |j                  g d      }t        t        ||      |j                  |j                               y )N)grC@g X?g	ml@)_+J?eY@g|H4rI   TrN   r   )r   r   gR%)r   r   r
   r9   rm   s       r    test_gh22903zTestLogSumExp.test_gh22903  sp     JJ;<JJ<=	!q)9Q!+Nq+QR JJ<=	!q)2::bff+=>r"   N)__name__
__module____qualname__rE   rL   rT   rX   rd   ri   rk   rn   rr   pytestmarkparametrizer   rw   ry   dtypesr   r   r   r   r   r    r"   r    r$   r$   !   sD   
1GfU*,+
8!; [[UQ	N3[[!!$!/K 0 4K [[!!$)N " P/P/
 [[Wf-/ ./ [[Y/[[Y/4 0 04$" [[W{L&AB. C.0H?r"   r$   c                       e Zd Zd Zd Zy)TestSoftmaxc                    t        t        g d      t        j                  g d      d       t        t        ddg      t        j                  ddg      d       t        t        ddg      t        j                  dt        j                  g      dt        j                  z   z  d       t        j
                  d      }t        j                  g d	      }t        t        |      |d       t        t        |d
z         |d       t        t        |j                  dd            |j                  dd      d       y )N)r+   r   r   r   )r   r   r   r   vIh%<=r   r         ?r   r]   )g*lI9i?g{O?gW-R?gI?r   r[   )r   r   r:   arrayer3   reshape)r<   r   expecteds      r    test_softmax_fixturesz!TestSoftmax.test_softmax_fixtures  s    0"((<2H"	$A2r();%HA1bdd))<a"$$h)G"	$
 IIaL88 0 1
 	
H59 	C((? 			!Q0(2B2B1a2H"	$r"   c                 V   t        t        ddgddggd      t        j                  ddgddgg      d       t        t        ddgddggd      t        j                  ddgddgg      d       t        j                  g dg d	g      }t        j                  g d
g dg      }t        t        |d      |d       t        t        |j                  d      |j                  d       |j                  ddd      }t        t        |d      |j                  ddd      d       y )Nr+   r   r.   r   r   r   r   )ir      2   )r   iE  i  i  )g	+9g.K|T}%m;g]7=g\?)rG   gpk&gTV6?gd?r[   )r   r[   )r   r   r:   r   Tr   )r<   r   r   x3ds       r    test_softmax_multi_axesz#TestSoftmax.test_softmax_multi_axes/  s   $T1I 6Q?2r(RH!56U	D$T1I 6Q?1a&1a&!12	@
 HH&&( )88 /0	1 2 	*H5A!,hjjuE ii1a &183C3CAq!3L"	$r"   N)r   r   r   r   r   r   r"   r    r   r     s    $6$r"   r   )r   r   numpyr:   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    <module>r      s       ) / F9 9 - 2 
MG$ +,k%P  R&R - & +,k%P  Rk? k?R - k?\4$ 4$r"   