U
    Hvf$                     @   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   fullarrayvstackr   r   infnan)adesiredbnxlogxXlogX r$   F/tmp/pip-unpacked-wheel-96ln3f52/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>   dddg} dddg}t | |dd\}}t|d t|d d S )Nr   r   Tr   return_sign)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   isfiniteisnanr   r,   r$   r$   r%   test_logsumexp_sign_zero\   s    r2   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            r4   T)r   r   r+   r   r4   r6   r   r5   r   onesZ	ones_liker   r   shaper,   r$   r$   r%   test_logsumexp_sign_shapeg   s    

r<   c                  C   sL   t d} t | }t| d|d}t|jd t| d|d}t|jd d S )Nr3   r4   )r   r   r7   r8   r9   )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)r6   r   r4   r   )r5   r      r'   )r   zerosr:   r   r>   r$   r$   r%   test_logsumexp_b_shape   s    

rB   c                  C   s   t tddddgtddddg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dd	d
dg}t t| |dd t t| d |dd t t| dd|dddd d S )Nr
   r   r   vIh%<=Zrtol      ?r6   g*lI9i?g{O?gW-R?gI?d   r4   )r   r   r   r   er   reshape)r    expectedr$   r$   r%   test_softmax_fixtures   s$      $
rJ   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ddd	d
gddddgg} tddddgddddg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   rE   rC   rD   r   i   2   iE  i  i  g	+9g.K|T}%m;g]7=g\?g        gpk&gTV6?gd?r4   )r   r4   )r   r   r   r   TrH   )r    rI   Zx3dr$   r$   r%   test_softmax_multi_axes   s8      
rN   )Znumpyr   Znumpy.testingr   r   r   r   r   Zscipy.specialr   r   r&   r)   r/   r2   r<   r=   r?   rB   rJ   rN   r$   r$   r$   r%   <module>   s   2	