o
    Eb$                     @   s   d dl Zd dlmZmZmZmZmZ d dlm	Z	m
Z
 dd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)assert_almost_equalassert_equalassert_allcloseassert_array_almost_equalassert_)	logsumexpsoftmaxc                  C   s  t d} t t t | }tt| | ddg}dt d }tt|| d}t j|ddd}dt | }tt|| t d	gd
 }t |}t 	||g}t 	||g}t
t t||  t
t t|dd|jdd t
t t|dd|jdd ttt jt j ttt j t j  ttt jt j ttt j t j gt j  t
tddgdt j ggddddg t
tddgdt j ggddddgdgg t
tddgdt j ggddd d S )N     g     @@g       @'  Zfloat64)Zdtypeg     @Ww'&l7i@B r   axis   g    _Bg|=g    _T)r   Zkeepdims)r   )nparangelogsumexpr   r   Zfullarrayvstackr   r   infnan)adesiredbnxlogxXlogX r#   D/usr/lib/python3/dist-packages/scipy/special/tests/test_logsumexp.pytest_logsumexp   sV   

  






r%   c                  C   s6  t d} t ddd}t t |t |  }tt| |d| ddg} ddg}dt d }tt| |d| t dgd	 }t d
dd	}t |}t 	||f}t 	||f}t 	||f}t
t t||d||   t
t t||dd|| jdd t
t t||d
d|| jd
d d S )Nr	   r   r   r   r
   g333333?g333333@r   i r   )r   r   r   )r   r   r   r   r   r   r   r   Zlinspacer   r   )r   r   r   r   r    r!   r"   Br#   r#   r$   test_logsumexp_b:   s*   

 r(   c                  C   s:   g d} g d}t | |dd\}}t|d t|d d S )N)r   r   r   )r   r   r   Tr   return_signr   r   )r   r   r   r   r   rsr#   r#   r$   test_logsumexp_signS   s
   
r.   c                  C   s\   ddg} ddg}t | |dd\}}tt|  tt|  t|dk  t|d d S )Nr   r   Tr)   r   )r   r   r   ZisfiniteZisnanr   r+   r#   r#   r$   test_logsumexp_sign_zero\   s   r/   c                  C   st   t d} t | }t| d|dd\}}t|j|j t|jd t| d|dd\}}t|j|j t|jd d S )Nr            r1   T)r   r   r*   r   r1   r3   r   r2   r   onesZ	ones_liker   r   shaper+   r#   r#   r$   test_logsumexp_sign_shapeg   s   

r9   c                  C   sL   t d} t | }t| d|d}t|jd t| d|d}t|jd d S )Nr0   r1   )r   r   r4   r5   r6   )r   r   r,   r#   r#   r$   test_logsumexp_shapev   s   

r:   c                  C   s&   ddg} ddg}t t| |dd d S )Nr   r   r   r&   )r   r   r   r   r#   r#   r$   test_logsumexp_b_zero   s   r<   c                  C   s$   t d} t d}t| |d d S )N)r3   r   r1   r   )r2   r      r&   )r   Zzerosr7   r   r;   r#   r#   r$   test_logsumexp_b_shape   s   

r>   c                  C   s   t tg dtg ddd t tddgtddgdd t tddgtdtjgdtj  dd td} tg d	}t t| |dd t t| d
 |dd t t| dd|dddd d S )N)r
   r   r   r   )r   r   r   r   vIh%<=Zrtolr         ?r   r3   )g*lI9i?g{O?gW-R?gI?d   r1   )r   r   r   r   er   reshape)r   expectedr#   r#   r$   test_softmax_fixtures   s    $

rF   c                  C   s   t tddgddggddtddgddggdd t tddgddggddtddgddggdd tg dg d	g} tg d
g dg}t t| dd|dd t t| jdd|jdd | ddd}t t|dd|ddddd d S )Nr
   r   r   rA   r?   r@   r   )ir      2   )r   iE  i  i  )g	+9g.K|T}%m;g]7=g\?)g        gpk&gTV6?gd?r1   )r   r1   )r   r   r   r   TrD   )r   rE   Zx3dr#   r#   r$   test_softmax_multi_axes   s$   


rJ   )Znumpyr   Znumpy.testingr   r   r   r   r   Zscipy.specialr   r   r%   r(   r.   r/   r9   r:   r<   r>   rF   rJ   r#   r#   r#   r$   <module>   s    2	