U
    »mœdkO  ã                   @   s–  d dl mZmZmZ d dlZd dlmZ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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 ¡d)d*„ ƒƒZ"d+d,„ Z#d-d.„ Z$d/d0„ Z%d1d2„ Z&ejj'd3d4„ ƒZ(d5d6„ Z)ejj'd7d8„ ƒZ*d9d:„ Z+d;d<„ Z,d=d>„ Z-d?d@„ Z.dAdB„ Z/dS )Cé    )ÚstatsÚlinalgÚ	integrateN)Úassert_almost_equalÚassert_Úassert_equalÚ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 )NéîÀ… éô  é   )Zddoféùÿÿÿé   éõ  ©ÚlocÚscaler   é   ç{®Gáz„?ç      à?©Ú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© r6   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_kdeoth.pyÚtest_kde_1d	   s2    


 ÿ ÿr8   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 )Nr   r   ©Úweightsr   r   r   r   r   r   r   r   r   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/   r0   r1   r2   r3   r4   r5   r6   r6   r7   Útest_kde_1d_weighted(   s4    

 ÿ ÿr>   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 )Nr   r   ç      ð?ç      @ç       @ç      @©Úsizer   r   ù             @@©r   Zcovr   r   r   r   ç}Ã”%­I²Ôç}Ã”%­I²Tr   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_coordsr1   r2   r3   ÚsmallÚlarger4   r5   r6   r6   r7   Útest_kde_2dH   s6    

"
 ÿ ÿrW   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 )Nr   r   r?   r@   rA   rB   rC   r9   r   r   rE   rF   r   r   r   r   rG   rH   r   r   )r   r   r   rI   rJ   rK   r;   r   r    rL   rM   rN   r"   rO   r$   rP   r   r%   r(   r   r)   r*   )r+   r   rQ   r,   r=   r/   rR   rS   rT   r1   r2   r3   rU   rV   r4   r5   r6   r6   r7   Útest_kde_2d_weightedo   s8    
"
 ÿ ÿrX   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©Zkde_objr6   r6   r7   Úscotts_factor˜   s    z0test_kde_bandwidth_method.<locals>.scotts_factorr   é2   ©Ú	bw_methodr   r   é3   Úwrongstring©r   r   r   r   r   r    Úfactorr!   r"   r   Úassert_raisesÚ
ValueError©
r_   r+   r,   r/   Zgkde2Zgkde3r0   r1   Zkdepdf2Zkdepdf3r6   r6   r7   Útest_kde_bandwidth_method—   s    





rj   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 rY   )r   r[   Zneffr]   r^   r6   r6   r7   r_   ²   s    z9test_kde_bandwidth_method_weighted.<locals>.scotts_factorr   r`   ra   r   r   rc   rd   re   ri   r6   r6   r7   Ú"test_kde_bandwidth_method_weighted±   s    





rk   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Úshaper]   r\   r_   Úcovariance_factorÚ_compute_covariance©Úselfrn   r6   r6   r7   Ú__init__Ð   s    z_kde_subclass1.__init__N)Ú__name__Ú
__module__Ú__qualname__rt   r6   r6   r6   r7   rl   Ï   s   rl   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_kde_subclass2c                    s   | j | _tƒ  |¡ d S rm   )r_   rp   Úsuperrt   rr   ©Ú	__class__r6   r7   rt   Ø   s    z_kde_subclass2.__init__)ru   rv   rw   rt   Ú__classcell__r6   r6   rz   r7   rx   ×   s   rx   c                   @   s   e Zd Zdd„ ZdS )Ú_kde_subclass4c                 C   s   d|   ¡  S )Nr   )Úsilverman_factor)rs   r6   r6   r7   rp   Þ   s    z _kde_subclass4.covariance_factorN)ru   rv   rw   rp   r6   r6   r6   r7   r}   Ý   s   r}   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	| ƒ}|| ƒ}dddddg}	t
|	|dd� ˆ }
‡ fdd„|
_|
 ¡  |
|ƒ}t||dd� d S )Nr   éûÿÿÿr   rZ   é   ©Údtypeéöÿÿÿé
   r`   ©Únum©Znulpgœn—,°?gÇ»e‡?°?gWÍ[3®?g¥a úà)¶?gKd8ú;´?é   r   c                      s   ˆ j S rm   )rf   r6   ©Úkder6   r7   Ú<lambda>   ó    z/test_gaussian_kde_subclassing.<locals>.<lambda>)r   rI   Úfloatr!   r   r    rl   r	   rx   r}   r   rp   rq   )Úx1r0   ZysZkde1Úy1Úkde2Úy2Zkde4Zy4Ú
y_expectedZkde5Zy5r6   r‰   r7   Ú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 )Nr   r   r   rZ   r€   r�   rƒ   r„   r…   g>L\ž9™?gp4=¨?gùHŒ–êŸ«?g8(H	MT«?gÄ²™CR‘?r   ra   Úscottr   r   )r   rI   r�   r!   r   r    Zset_bandwidthr   )rŽ   r0   r’   rŠ   r‘   r6   r6   r7   Ú$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 )zÞUgly, 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.
    r   r   r   rZ   r€   r�   rƒ   r„   r`   r…   Ú	silvermanra   r‡   N)
r   rI   r�   r!   r   r    r~   rp   rq   r	   )rŽ   r0   rŠ   r�   r�   r‘   r6   r6   r7   Ú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.r€   gB…×\AÁ?g­±øESÇ?gÔö
f§úÈ?rˆ   r   N)r   Úaranger   r    r   )rŽ   rŠ   r’   r6   r6   r7   Útest_kde_integer_input+  s    

r™   Zfloat32Úfloat64Zfloat96Zfloat128Zint32Zint64Úbw_typer”   r–   r‚   c                 C   s¼   t t| d ƒ} |dkr|}nt t|d ƒ}|r2|dƒnd }tdd„ | |fD ƒƒrTt ¡  tjd| d�}tjd| d�}tj|||d�}tjd| d�}||ƒ}|jt 	||t 
|¡|j¡ks¸t‚d S )N)r”   r–   é   c                 s   s   | ]}|d kV  qd S rm   r6   )Ú.0Údtr6   r6   r7   Ú	<genexpr>A  s     z(test_kde_output_dtype.<locals>.<genexpr>r€   r�   )rb   r:   )Úgetattrr   ÚanyÚpytestÚskipr˜   r   r    r‚   Zresult_typerš   rf   ÚAssertionError)r‚   r›   Úbwr:   rn   ÚkÚpointsÚresultr6   r6   r7   Útest_kde_output_dtype5  s    ÿr©   c               	   C   sV   t j d¡} |  d¡}t |¡}|  d¡}d}tjt|d�� | 	|¡ W 5 Q R X d S )Nl	   ›FÃgçu	\–U.˜lt&0 )r   r„   )rœ   r„   z0points have dimension 3, dataset has dimension 2©Úmatch)
r   r   Údefault_rngZstandard_normalr   r    r¢   r   rh   Úlogpdf)Úrngr,   r/   r0   Úmsgr6   r6   r7   Útest_pdf_logpdf_validationN  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   r`   éñÿÿÿé   é   r   )r   r   r   r   r   r    r!   r"   r$   r   Úlogr­   )r+   r,   r/   r0   r$   Úpdf2r­   Úlogpdf2r6   r6   r7   Útest_pdf_logpdfY  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   r`   r9   r±   r²   r³   r   )r   r   r   r   r;   r   r    r!   r"   r$   r   r´   r­   Úlen)	r+   r,   r=   r/   r0   r$   rµ   r­   r¶   r6   r6   r7   Útest_pdf_logpdf_weightedq  s     




r¹   c            	         s¦   t j d¡} d}d}| j||fd�}| j|dfd�}t  ddddd	d
dddg	¡‰ t |¡‰ˆ ˆ ¡}| |ˆ  ¡}‡ ‡fdd„‰‡fdd„}||ƒ}t	||dd� d S )Nì   K b1d‹& r`   r„   rC   rœ   r   r   rZ   r€   rˆ   r   é   é	   c                    s(   ‡‡‡ fdd„}t  |tj tj¡d S )Nc                    s"   t  | gˆˆ  f¡} ˆ | ¡d S ©Nr   )r   Zconcatenater$   )rR   ©Ú
dimensionsrŠ   Úpointr6   r7   Úf˜  s    z<test_marginal_1_axis.<locals>.marginal_pdf_single.<locals>.fr   )r   Úquadr   r'   ©rÀ   rÁ   ©r¿   rŠ   ©rÀ   r7   Úmarginal_pdf_single—  s    z1test_marginal_1_axis.<locals>.marginal_pdf_singlec                    s   t jˆ d| d�S )Nr   ©ZaxisZarr©r   Zapply_along_axis)r§   )rÆ   r6   r7   Úmarginal_pdf�  s    z*test_marginal_1_axis.<locals>.marginal_pdfç�íµ ÷Æ°>©Úrtol©
r   r   r¬   ÚnormalrI   r   r    Úmarginalr$   r
   ©	r®   Ún_dataÚn_dimrn   r§   rÏ   r$   rÉ   Úrefr6   )r¿   rŠ   rÆ   r7   Útest_marginal_1_axisŠ  s    

rÔ   c            	         sŒ   t j d¡} d}d}| j||fd�}| j|dfd�}t  ddg¡‰ t |¡‰ˆ ˆ ¡}| |ˆ  ¡}‡ ‡fdd„}||ƒ}t	||d	d
� d S )Nrº   é   rZ   rC   rœ   r   c                    s   ‡ ‡fdd„}t j|d| d�S )Nc                    s2   ‡‡‡ fdd„}t  |tj tjtj tj¡d S )Nc                    s,   ˆˆ  \}}t  ||| |g¡}ˆ |¡d S r½   )r   rI   r$   )rS   rR   ÚwÚzr¾   r6   r7   rÁ   µ  s    zRtest_marginal_2_axis.<locals>.marginal_pdf.<locals>.marginal_pdf_single.<locals>.fr   )r   Zdblquadr   r'   rÃ   rÄ   rÅ   r7   rÆ   ´  s    zGtest_marginal_2_axis.<locals>.marginal_pdf.<locals>.marginal_pdf_singler   rÇ   rÈ   )r§   rÆ   rÄ   r6   r7   rÉ   ³  s    z*test_marginal_2_axis.<locals>.marginal_pdfrÊ   rË   rÍ   rÐ   r6   rÄ   r7   Útest_marginal_2_axis¥  s    


rØ   c               	   C   s  t j d¡} d}d}| j||fd�}| j|dfd�}t |¡}ddg}| |¡}| || ¡}ddg}	| |	¡}
|
 ||	 ¡}t||ƒ d	}t	j
t|d
�� | ddg¡ W 5 Q R X d}t	j
t|d
�� | dddg¡ W 5 Q R X d}t	j
t|d
�� | dddg¡ W 5 Q R X d S )Nrº   rÕ   rZ   rC   rœ   éÿÿÿÿr   éýÿÿÿz,Elements of `dimensions` must be integers...rª   g      @z,All elements of `dimensions` must be unique.r   z;Dimensions \[-5  6\] are invalid for a distribution in 4...r   rˆ   )r   r   r¬   rÎ   r   r    rÏ   r$   r   r¢   r   rh   )r®   rÑ   rÒ   rn   r§   rŠ   Zdimensions1Z	marginal1Zpdf1Zdimensions2Z	marginal2rµ   Úmessager6   r6   r7   Útest_marginal_ivÂ  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 r6   )r   r   r   )r�   r\   ©Z	n_samplesr6   r7   Ú
<listcomp>î  s     z(test_logpdf_overflow.<locals>.<listcomp>r   F)r   r   r   rI   Úranger   r    r­   r˜   Útestingr   ZisneginfÚisnan)Zn_dimensionsr,   r/   r­   r6   rÝ   r7   Ú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 )	Né90  éd   rC   r?   g      $@r9   ç›+¡†›„=©ÚatolrÌ   )r   r   r   Z	lognormalÚchoicerD   Úcopyr   r    Úlog10r
   )Úvalsr:   Zorig_weightsr6   r6   r7   Ú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 )Nrã   gš™™™™™É?g      +@g      5@g     ÀR@g     ÀX@r   r   rZ   r»   é   r9   g333333Ó?é   éX   rå   ræ   )r   r   r   r   r    rš   r
   r"   )Úvaluesr:   Zpdf_iZpdf_fr,   r6   r6   r7   Ú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ƒrÄtj d¡}| j ||d� d S )	NéÈ   g‚vIhÂ%<=)rç   i?  )r   éŠ   r¬   iÒ  )	Zresamplerg   r¤   r
   r   r   ZRandomStateÚhasattrr¬   )Z
gkde_trailZn_sampleZsamp1Zsamp2r   Zrstate1Zrstate2r®   r6   r6   r7   Útest_seed_sub  s,    

    ÿz test_seed.<locals>.test_seed_subr   r   r9   r?   r@   rA   rB   rC   )
r   r   r   r;   r   r   r    rI   rJ   rK   )rõ   r+   r=   Zxn_1dZgkde_1dZgkde_1d_weightedr   rQ   Zxn_2dZgkde_2dZgkde_2d_weightedr6   r6   r7   Ú	test_seed  s     

rö   c                  C   s¢   t j d¡} t  dddg¡}t  dddgdddgdddgg¡}|  ||d	¡}zt |j¡ W n@ tj	k
rœ   d
}t
tj	|d�� t |j¡ W 5 Q R X Y nX d S )Nl   SDÐG.¿ r   r„   é   rZ   r   r³   rä   iè  z:The data appears to lie in a lower-dimensional subspace...rª   )r   r   r¬   rI   rJ   r   r    rK   r   ZLinAlgErrorrg   )r®   ÚmuÚsigmaÚdatar¯   r6   r6   r7   Ú%test_singular_data_covariance_gh10205C  s    "rû   c               	   C   sT   t j d¡} | jt  d¡t  d¡dd�}d}tjt|d�� t	 
|¡ W 5 Q R X d S )Nl   Ìû&ž8*c rœ   r€   rC   z9Number of dimensions is greater than number of samples...rª   )r   r   r¬   rJ   ZzerosÚeyer¢   r   rh   r   r    )r®   ZrvsrÛ   r6   r6   r7   Ú)test_fewer_points_than_dimensions_gh17436R  s
    rý   )0Zscipyr   r   r   Únumpyr   Znumpy.testingr   r   r   r   r	   r
   r¢   r   rg   r8   r>   ÚmarkZslowrW   rX   rj   rk   r    rl   rx   r}   r“   r•   r—   r™   Z_ftypesZparametrizer©   r°   r·   r¹   rÔ   ZxslowrØ   rÜ   râ   rì   rñ   rö   rû   rý   r6   r6   r6   r7   Ú<module>   sJ     
&
'$
%
2