B
    `E@                 @   sx  d dl mZ d dlZd dlmZmZmZmZm	Z	 d dl
Z
d dl
mZ dd Zdd Ze
jjd	d
 Ze
jjdd Zdd Zdd ZG dd dejZG dd dejZG dd dejZG dd dejZdd Zdd Zdd Zdd  Zd!d"d#d$d%d&gZe
jd'ed(d)g e
jd*ee
jd+ee
jd,ed-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&dS );    )statsN)assert_almost_equalassert_assert_array_almost_equalassert_array_almost_equal_nulpassert_allclose)raisesc              C   sH  t jd d} t j| }| }|jdd}t|}t ddd}|	|}tj
j|||d}|d |d	  }tt || d
 | dk  ||t j}	|t j |}
t|	ddd t|
ddd t||t j|	dd t|t j ||
dd t|||d
  | d
d t|||d
 ||  | d
d d S )Ni i     )Zddofi   i  )locscaler      g{Gz?g      ?)decimal   )nprandomseedrandnmeanZstdr   gaussian_kdelinspaceevaluatenormpdfr   sumintegrate_box_1dinfr   integrate_boxintegrate_kdeintegrate_gaussian)n_basesamplexnxnmeanxnstdgkdexskdepdfnormpdf	intervallprob1prob2 r+   L/home/dcms/DCMS/lib/python3.7/site-packages/scipy/stats/tests/test_kdeoth.pytest_kde_1d	   s*    


r-   c              C   sn  t jd d} t j| }t j| }t j||d}t t j|| d |d}tj||d}t 	ddd}|
|}tjj|||d}|d	 |d
  }	tt || d |	 dk  ||t j}
|t j |}t|
dd	d t|dd	d t||t j|
dd t|t j ||dd t|||d  |	 dd t|||d ||  |	 dd d S )Ni i  )weightsr   ir
   i  )r   r   r	   r   g{Gz?g      ?)r   r   )r   r   r   r   randZaveragesqrtr   r   r   r   r   r   r   r   r   r   r   r   r   r   )r    r!   wnr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r+   r,   test_kde_1d_weighted(   s,    

r2   c              C   s  t jd d} t ddg}t ddgddgg}t jj||| dj}t|}t jdd	d
dd	d
f \}}t 	|
 |
 g}||}|dd}tjjt ||g||d}	|
 d |
 d  }
tt ||	 d |
d  dk  d}d}|||d g||g}|||g||d g}t|ddd t|ddd t|||d  |
d  dd t|||||	  |
d  dd d S )Ni i  g      ?g      @g       @g      @)sizeir
   y             @@)r   covr	   r   r   g{Gz?g}Ô%Ig}Ô%ITg      ?)r   )r   r   r   arraymultivariate_normalTr   r   mgridvstackravelr   reshaper   dstackr   r   r   r   r   r   )r    r   
covariancer!   r$   xygrid_coordsr&   r'   r(   smalllarger)   r*   r+   r+   r,   test_kde_2dH   s.    

"
rC   c              C   s  t jd d} t ddg}t ddgddgg}t jj||| dj}t j| }tj||d}t j	d	d
dd	d
df \}}t 
| | g}||}	|	dd}	tjjt ||g||d}
| d | d  }tt |	|
 d |d  dk  d}d}|||d g||g}|||g||d g}t|ddd t|ddd t|||	d  |d  dd t||||	|
  |d  dd d S )Ni i  g      ?g      @g       @g      @)r3   )r.   ir
   y             @@)r   r4   r	   r   r   g{Gz?g}Ô%Ig}Ô%ITg      ?)r   )r   r   r   r5   r6   r7   r/   r   r   r8   r9   r:   r   r;   r   r<   r   r   r   r   r   r   )r    r   r=   r!   r1   r$   r>   r?   r@   r&   r'   r(   rA   rB   r)   r*   r+   r+   r,   test_kde_2d_weightedo   s0    
"
rD   c        
      C   s   dd } t jd d}t j|}t|}tj|| d}tj||jd}t ddd}||}||}t	|| ||}	t	||	 t
ttj|d	d d S )
Nc             S   s   t | jd| jd  S )z*Same as default, just check that it works.g         )r   powernd)kde_objr+   r+   r,   scotts_factor   s    z0test_kde_bandwidth_method.<locals>.scotts_factori 2   )	bw_methodir
   3   wrongstring)r   r   r   r   r   r   factorr   r   r   assert_raises
ValueError)
rJ   r    r!   r$   gkde2gkde3r%   r&   kdepdf2kdepdf3r+   r+   r,   test_kde_bandwidth_method   s    





rV   c        
      C   s   dd } t jd d}t j|}t|}tj|| d}tj||jd}t ddd}||}||}t	|| ||}	t	||	 t
ttj|d	d d S )
Nc             S   s   t | jd| jd  S )z*Same as default, just check that it works.g      rE   )r   rF   ZneffrH   )rI   r+   r+   r,   rJ      s    z9test_kde_bandwidth_method_weighted.<locals>.scotts_factori rK   )rL   ir
   rM   rN   )r   r   r   r   r   r   rO   r   r   r   rP   rQ   )
rJ   r    r!   r$   rR   rS   r%   r&   rT   rU   r+   r+   r,   "test_kde_bandwidth_method_weighted   s    





rW   c               @   s   e Zd Zdd ZdS )_kde_subclass1c             C   s0   t || _| jj\| _| _| j| _|   d S )N)	r   Z
atleast_2ddatasetshaperH   rG   rJ   covariance_factor_compute_covariance)selfrY   r+   r+   r,   __init__   s    z_kde_subclass1.__init__N)__name__
__module____qualname__r^   r+   r+   r+   r,   rX      s   rX   c                   s   e Zd Z fddZ  ZS )_kde_subclass2c                s   | j | _tt| | d S )N)rJ   r[   superrb   r^   )r]   rY   )	__class__r+   r,   r^      s    z_kde_subclass2.__init__)r_   r`   ra   r^   __classcell__r+   r+   )rd   r,   rb      s   rb   c               @   s   e Zd Zdd Zdd ZdS )_kde_subclass3c             C   s   || _ tj| | d S )N)r=   r   r   r^   )r]   rY   r=   r+   r+   r,   r^      s    z_kde_subclass3.__init__c             C   s4   t j| j| _t t jdt j | j | _d S )Nr   )	r   Zlinalginvr=   Zinv_covr0   ZdetpiZ_norm_factor)r]   r+   r+   r,   r\      s    z"_kde_subclass3._compute_covarianceN)r_   r`   ra   r^   r\   r+   r+   r+   r,   rf      s   rf   c               @   s   e Zd Zdd ZdS )_kde_subclass4c             C   s   d|    S )Ng      ?)silverman_factor)r]   r+   r+   r,   r[      s    z _kde_subclass4.covariance_factorN)r_   r`   ra   r[   r+   r+   r+   r,   ri      s   ri   c                 s   t jdddddgtd} t jddd	d
}t|   |}t| }||}t||dd t| }||}t||dd t	|  j
}||}t||dd t| }	|	| }
dddddg}t||
dd  } fdd|_|  ||}t||dd d S )Nir	   rE      )dtypei
   rK   )num)nulpgn,?gǻe??gW[3?ga )?gKd8;?   )r   c                  s    j S )N)rO   r+   )kder+   r,   <lambda>      z/test_gaussian_kde_subclassing.<locals>.<lambda>)r   r5   floatr   r   r   rX   r   rb   rf   r=   ri   r   r[   r\   )x1r%   ZysZkde1y1kde2y2Zkde3Zy3Zkde4Zy4
y_expectedZkde5Zy5r+   )rr   r,   test_gaussian_kde_subclassing   s,    
r{   c              C   sr   t jdddddgtd} t jdddd	}d
ddddg}t| }|jdd |jdd ||}t||dd d S )Nirk   r	   rE   rl   )rm   irn   )ro   g>L\9?gp4=?gH꟫?g8(H	MT?gĲCR?g      ?)rL   scottr
   )r   )r   r5   ru   r   r   r   Zset_bandwidthr   )rv   r%   rz   rr   ry   r+   r+   r,   $test_gaussian_kde_covariance_caching  s    
r}   c              C   sr   t jdddddgtd} t jddd	d
}t| }|j|_|  ||}tj| dd}||}t	||dd dS )zUgly, but people may rely on this.  See scipy pull request 123,
    specifically the linked ML thread "Width of the Gaussian in stats.kde".
    If it is necessary to break this later on, that is to be discussed on ML.
    irk   r	   rE   rl   )rm   irn   rK   )ro   	silverman)rL   )rp   N)
r   r5   ru   r   r   r   rj   r[   r\   r   )rv   r%   rr   rw   rx   ry   r+   r+   r,   test_gaussian_kde_monkeypatch"  s    
r   c              C   s8   t d} t| }dddddg}t|| |dd dS )zRegression test for #1181.rl   gB\A?gES?g
f?rq   )r   N)r   aranger   r   r   )rv   rr   rz   r+   r+   r,   test_kde_integer_input7  s    

r   float32float64Zfloat96Zfloat128int32int64bw_typer|   r~   weights_typedataset_type
point_typec       
      C   s   t t| d } t t|d }t t|d }|dkr2|}nt t|d }|rJ|dnd }tdd | |||gD rpt  tjd|d}tjd|d}tjj|||d}tjd| d}||}	|	j	t
||t||jkstd S )N)r|   r~      c             s   s   | ]}|d kV  qd S )Nr+   ).0dtr+   r+   r,   	<genexpr>Q  s    z(test_kde_output_dtype.<locals>.<genexpr>rl   )rm   )rL   r.   )getattrr   anypytestskipr   r   rr   r   rm   Zresult_typer   rO   AssertionError)
r   r   r   r   Zbwr.   rY   kZpointsresultr+   r+   r,   test_kde_output_dtypeA  s     r   c              C   s   t jd d} t j| }t|}t ddd}||}||}t	||dd t 
|}||}t	||dd t|}t 
||}||}t	||dd d S )Nr	   rK   i      )r   )r   r   r   r   r   r   r   r   r   r   loglogpdf)r    r!   r$   r%   r   pdf2r   logpdf2r+   r+   r,   test_pdf_logpdf^  s    






r   c        	      C   s   t jd d} t j| }t j| }tj||d}t ddd}||}|	|}t
||dd t |}||}t
||dd tj|t jt|d}t ||}||}t
||dd d S )Nr	   rK   )r.   ir   r   )r   )r   r   r   r   r/   r   r   r   r   r   r   r   r   len)	r    r!   r1   r$   r%   r   r   r   r   r+   r+   r,   test_pdf_logpdf_weightedv  s     




r   c                 s   t jd d} d t  fddtd| D }t|}|t d| }t j	
t |d d t j	
t |d d d S )Nr	   i	  i  c                s   g | ]}t j | qS r+   )r   r   r   )r   rG   )	n_samplesr+   r,   
<listcomp>  s    z(test_logpdf_overflow.<locals>.<listcomp>r   F)r   r   r   r5   ranger   r   r   r   ZtestingZassert_equalZisneginfisnan)Zn_dimensionsr!   r$   r   r+   )r   r,   test_logpdf_overflow  s    
r   c              C   sb   t jd t jjdd} t jjdddg| jd}| }tjt 	| |d t
||ddd d S )	Ni90  d   )r3   g      ?g      $@)r.   g+=)atolrtol)r   r   r   Z	lognormalchoicer3   copyr   r   log10r   )valsr.   Zorig_weightsr+   r+   r,   test_weights_intact  s    r   c              C   st   t jd dddddg} ddd	d
dg}tj| |d}tj| t |d}dddg}t||||ddd d S )Ni90  g?g      +@g      5@g     R@g     X@r	   r   rE         )r.   g333333?   X   g+=)r   r   )r   r   r   r   r   r   r   r   )valuesr.   Zpdf_iZpdf_fr!   r+   r+   r,   test_weights_integer  s    

r   c              C   s   dd } t jd d}t j|}t j|}t|}| | tj||d}| | t ddg}t ddgdd	gg}t jj|||d
j	}t|}	| |	 tj||d}
| |
 d S )Nc             S   s   d}|  |}|  |}ttt||dd d}| j ||d}| j ||d}t||dd tjjdd}| j ||d}tjjdd}| j ||d}t||dd ttjdrtjd}| j ||d d S )	N   gvIh%<=)r   i?  )r      default_rngi  )	ZresamplerP   r   r   r   r   ZRandomStatehasattrr   )Z
gkde_trailZn_sampleZsamp1Zsamp2r   Zrstate1Zrstate2rngr+   r+   r,   test_seed_sub  s"    

z test_seed.<locals>.test_seed_subi i  )r.   g      ?g      @g       @g      @)r3   )
r   r   r   r/   r   r   r   r5   r6   r7   )r   r    r1   Zxn_1dZgkde_1dZgkde_1d_weightedr   r=   Zxn_2dZgkde_2dZgkde_2d_weightedr+   r+   r,   	test_seed  s     

r   )'Zscipyr   numpyr   Znumpy.testingr   r   r   r   r   r   r   rP   r-   r2   markZslowrC   rD   rV   rW   r   rX   rb   rf   ri   r{   r}   r   r   Z_ftypesZparametrizer   r   r   r   r   r   r   r+   r+   r+   r,   <module>   s:    '(
&