B
    `+                 @   s  d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z d dlm  mZ d dlmZ d dlmZ d-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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_allcloseassert_equalsuppress_warnings)raises)getfullargspec_no_self)statsFc             C   sL   xFt |D ]:\}}|r.t| | t| | q
t| | t| | q
W d S )N)	enumeratema_nptr   getattrnpt)res
attributesmaiattr r   M/home/dcms/DCMS/lib/python3.7/site-packages/scipy/stats/tests/common_tests.pycheck_named_results   s    r   c       
      C   s   | j d| }t|d |dkr,d\}}nd\}}| jdd |d}tj|d|||d	d
 | j| \}}| j|f| }	t|	d d S )Nr   g      ?Zncf)gh㈵>r   )gHz>gHz>c             S   s   dS )N   r   )xr   r   r   <lambda>!       z%check_normalization.<locals>.<lambda>)argsT)atolrtolerr_msgverbose)r   )momentr   r   expectsupportcdf)
distfnr   distnameZnorm_momentr   r   Znormalization_expectZ_a_bZnormalization_cdfr   r   r   check_normalization   s    

r$   c             C   s   | j d	| }| j d
| }t|s>tj||d|d d ntt||dt|   t|stj|||  |d|d d ntt||dt|   d S )Nr      
   z - 1st moment)decimalr   z - 1st moment -infinite, m1=%sz - 2ndt momentz - 2nd moment -infinite, m2=%s)r   )r%   )r   npisinfr   assert_almost_equalassert_str)r!   argmvmsgm1m2r   r   r   check_moment*   s    

r3   c             C   s4   t |r0| dd |}tj||d|d d d S )Nc             S   s   | S )Nr   )r   r   r   r   r   >   r   z#check_mean_expect.<locals>.<lambda>   z - 1st moment (expect))r'   r   )r(   isfiniter   r   r*   )r!   r-   r.   r0   r1   r   r   r   check_mean_expect<   s    
r6   c             C   s<   t |r8| dd |}tj||||  d|d d d S )Nc             S   s   | |  S )Nr   )r   r   r   r   r   E   r   z"check_var_expect.<locals>.<lambda>r4   z - 2st moment (expect))r'   r   )r(   r5   r   r   r*   )r!   r-   r.   r/   r0   r2   r   r   r   check_var_expectC   s    
r7   c                sV   t |rB|  fdd|}tj||t |d d|d d ntt | d S )Nc                s   t |   dS )N   )r(   power)r   )r.   r   r   r   L   r   z#check_skew_expect.<locals>.<lambda>g      ?r4   z - skew)r'   r   )r(   r5   r   r   r*   r9   r+   isnan)r!   r-   r.   r/   sr0   Zm3er   )r.   r   check_skew_expectJ   s
    
r<   c                sf   t |rH|  fdd|}tj||d t |d dd|d d nt |sbtt | d S )Nc                s   t |   dS )N   )r(   r9   )r   )r.   r   r   r   U   r   z#check_kurt_expect.<locals>.<lambda>g      @r%   gh㈵>z - kurtosis)r   r   r   )	r(   r5   r   r   r   r9   Zisposinfr+   r:   )r!   r-   r.   r/   kr0   Zm4er   )r.   r   check_kurt_expectS   s    

r?   c             C   s&   | j | }tt| |d  d S )Nztest Entropy is nan)entropyr   r+   r(   r:   )r!   r-   r0   entr   r   r   check_entropy\   s    
rB   c             C   s"   t | j| |j| f|  d S )N)r   r   Z_entropy)r!   r   
superclassr   r   r   check_private_entropya   s    rD   c                s   t ddgddgg}j d|i} fdd| D }t ||j}t||dd	 ddd
g}j d|i} fdd|D }t ||j}t||dd	 d S )Nr   r%   r8   r=   scalec                s   g | ]}j  d |iqS )rE   )r@   ).0r;   )r-   r!   r   r   
<listcomp>k   s    z,check_entropy_vect_scale.<locals>.<listcomp>g+=)r   c                s   g | ]}j  d |iqS )rE   )r@   )rF   r;   )r-   r!   r   r   rG   r   s    )r(   asarrayr@   ZravelZreshapeshaper   )r!   r-   ZscZv_entZs_entr   )r-   r!   r   check_entropy_vect_scaleg   s    
rK   c             C   s:  | j | }t| tjr*|d d |d f}t| j|f| ddg t| j|f| ddg | jdkrt| j	|f| t
j dg t| j|f| dt
j g t| jddgf| | t| jddgf| |d d d  tt
| jddgf|   tt
| jddgf|   d S )Nr   r   g        g      ?)ZskellamZdlaplacer%   )r   
isinstancer   Zrv_discreter   r   r    sfnamelogcdfr(   inflogsfppfisfr+   r:   all)r!   r   r   r   r   r   check_edge_supportw   s    

  &$rV   c                s  t | j}t|jd k t|jd k t|j  tt|jt|k |j	d t
|  }| jr~| jdd }nd}tt
|| jk tt
|t
|k tfdd|D }ttt| |d d  d d  i   }	 xt|	rr|	   i  fdd|D }
t||
 d kr t| jd | jd  q W d	d
i tt| jf d S )N,  c                s   g | ]}|f  qS r   r   )rF   meth)
shape_argsr   r   r   rG      s    z$check_named_args.<locals>.<listcomp>c                s   g | ]}|f qS r   r   )rF   rZ   )ar>   r   r   r   rG      s    nr   Zkaboom*   )r   )r   )_getfullargspec_parse_argsr   r+   varargsvarkw
kwonlyargslistdefaultsr   lenZshapesreplacesplitZnumargsr(   rU   r5   updatepopZassert_array_equalkeysr   r   assert_raises	TypeErrorr    )r!   r   r[   re   meths	signatureZshape_argnamesZshapes_valsnamesr/   r   )r\   r>   r[   r   r   check_named_args   s0    
 rr   c       	      C   s   | j }tjd d | _ | j|ddi}d| _ | j|ddi}t|| tjd| _ | j|ddi}t|| ttjdrtj	d}| j|d|d d| _ | j 
 }| j|dtjdd}t|| t| j 
 | || _ d S )Ni  size   default_rngr   )rs   random_stater%   )rv   r(   randomseedrvsr   r   ZRandomStatehasattrru   Z	get_state)	r!   r   rndmr0r1Zr2rngZ
orig_stateZr3r   r   r   check_random_state_property   s&    
r   c                s   dddg}| j |f|   fddtjtjtjtjfD }x\|D ]T}| j|  || j|k || jk @  }x,|D ]$}||f| }t	
|jtjk qnW qBW d S )Ng      ?g      ?g      ?c                s   g | ]}  |qS r   )astype)rF   tp)x0r   r   rG      s    z$check_meth_dtype.<locals>.<listcomp>)rS   r(   int_float16float32float64	_argcheckr\   br   r+   dtypefloat_)r!   r-   rn   q0x_castr   rZ   valr   )r   r   check_meth_dtype   s    




r   c                sv   t dddg  fddt jt jt jfD }xB|D ]:}x4| j| jgD ]$}||f| }t|j	t j
k qFW q4W d S )Ng      ?g      ?g      ?c                s   g | ]}  |qS r   )r   )rF   r   )r   r   r   rG      s    z#check_ppf_dtype.<locals>.<listcomp>)r(   rI   r   r   r   rS   rT   r   r+   r   r   )r!   r-   Zq_castqrZ   r   r   )r   r   check_ppf_dtype   s    
r   c                sb  dd }| j dddgf|   fddtjtjtjtjfD }x|D ]}| j|  || j|k || jk @  }| j	|f| | j
|f| | j|f|   }}}t|| j
|f| |dd	 t|| j|f| || dd	 t|| j|f| | dd	 t|| j|f| | | dd	 t|| j|f| || j	|f| | j	|f|  dd	 qHW d S )
Nc             W   s*   t |}d}| ||d  f| | jS )Ng|=y              ?)r(   rI   imag)fr   r-   hr   r   r   deriv   s    
z check_cmplx_deriv.<locals>.derivg      ?gRQ?g      ?c                s   g | ]}  |qS r   )r   )rF   r   )r   r   r   rG      s    z%check_cmplx_deriv.<locals>.<listcomp>gh㈵>)r   )rS   r(   r   r   r   r   r   r\   r   pdfr    rN   r   rP   rR   Zlogpdf)r!   r-   r   r   r   r   r    rN   r   )r   r   check_cmplx_deriv   s    

4 " r   c             C   s   | j }d| _ | j|ddi t| }| j|ddi}t|}|j|ddi}t|| | jd| |jd| g}t|d |d  t| j|d f| |j|d f|  || _ d S )	Ni  rs   rt         ?r   r   )r   )r   )	rv   ry   pickledumpsloadsr   r   rS   r    )r!   r   r{   r;   r|   Z	unpickledr}   Zmediansr   r   r   check_pickling  s    

r   c             C   sV   t | tjrddd}nddi}| ||}|j| | jks>t|j| | jksRtd S )Nr   r%   )locrE   r   )rM   r   Zrv_continuousr\   AssertionErrorr   )r!   r   Zlocscalervr   r   r   check_freezing+  s    
r   c       
   	      s   t jd t l}|jtdd  j| }t|j|d|  |szt j	 fdd|d}t jd || }	t
||	dd	 W d Q R X d S )
N{   z
.*frechet_)categorymessagez%s: rvs failed to broadcastc                 s
    j |  S )N)ry   )allargs)distfuncr   r   r   A  r   z%check_rvs_broadcast.<locals>.<lambda>)ZotypesgvIh%<=)r   )r(   rw   rx   r   filterDeprecationWarningry   r   rJ   Z	vectorizer   )
r   r"   r   rJ   Z
shape_onlyotypesupsamplery   expectedr   )r   r   check_rvs_broadcast8  s    
r   )F)(r   numpyr(   Znumpy.testingZtestingr   r   r   r   Zpytestr   rl   Znumpy.ma.testutilsr   Z	testutilsr	   Zscipy._lib._utilr   r_   Zscipyr   r   r$   r3   r6   r7   r<   r?   rB   rD   rK   rV   rr   r   r   r   r   r   r   r   r   r   r   r   <module>   s4   
		')	