a
    ˆù»jVR  ã                   @   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g d¢Z ej !d e d!d"g ¡ej !d#e ¡d$d%„ ƒƒZ"d&d'„ Z#d(d)„ Z$d*d+„ Z%d,d-„ Z&ejj'd.d/„ ƒZ(d0d1„ Z)ejj'd2d3„ ƒZ*d4d5„ Z+d6d7„ Z,d8d9„ Z-d:d;„ Z.d<d=„ Z/dS )>é    )Ú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   úCE:\soccer\ml_env\Lib\site-packages\scipy/stats/tests/test_kdeoth.pyÚtest_kde_1d
   s.    


ÿÿ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)   s0    

ÿÿ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_2dI   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_weightedq   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g d¢td�} t jdddd�}t | ¡‰ ˆ |ƒ}t| ƒ}||ƒ}t||dd� t| ƒ}||ƒ}t||dd� t	| ƒ}|| ƒ}g d¢}	t
|	|d	d
� ˆ }
‡ fdd„|
_|
 ¡  |
|ƒ}t||dd� d S )N©r   éûÿÿÿr   rZ   é   ©Údtypeéöÿÿÿé
   r`   ©Únum©Znulp)gœ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   sf   t jg d¢td�} t jdddd�}g d¢}t | ¡}|jdd	� |jd
d	� ||ƒ}t||dd� d S )Nr   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   sl   t jg d¢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„   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   s2   t  d¡} t | ¡}g d¢}t|| ƒ|dd� dS )zRegression test for #1181.r�   )çB…×\AÁ?ç­±øESÇ?gÔö
f§úÈ?rš   r™   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v 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¸J ‚d S )N)r•   r—   é   c                 s   s   | ]}|d u V  qd S rm   r6   )Ú.0Údtr6   r6   r7   Ú	<genexpr>E  r�   z(test_kde_output_dtype.<locals>.<genexpr>r�   r‚   )rb   r:   )Úgetattrr   ÚanyÚpytestÚskipr›   r   r    rƒ   Zresult_typer�   rf   )rƒ   rž   Úbwr:   rn   ÚkÚpointsÚresultr6   r6   r7   Útest_kde_output_dtype9  s    ÿr«   c                  C   sj   t j d¡} |  d¡}t |¡}|  d¡}d}tjt|d�� | 	|¡ W d   ƒ n1 s\0    Y  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_validationR  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_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   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_weightedu  s     




r»   c            	         s˜   t j d¡} d}d}| j||fd�}| j|dfd�}t  g d¢¡‰ t |¡‰ˆ ˆ ¡}| |ˆ  ¡}‡ ‡fdd„‰‡fd	d
„}||ƒ}t	||dd� d S )Nì   K b1d‹& r`   r…   rC   rŸ   )	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   Z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   sN  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 d   ƒ n1 s¾0    Y  d}t	j
t|d
�� | g d¢¡ W d   ƒ n1 sþ0    Y  d}t	j
t|d
�� | g d¢¡ W d   ƒ n1 �s@0    Y  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   r   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¥   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>ò  r�   z(test_logpdf_overflow.<locals>.<listcomp>r   F)r   r   r   rI   Úranger   r    r¯   r›   Ztestingr   ZisneginfÚisnan)Zn_dimensionsr,   r/   r¯   r6   rÞ   r7   Útest_logpdf_overflowë  s    ÿ

râ   c                  C   s`   t j d¡ t jjdd�} t jjg d¢| jd�}| ¡ }tjt  	| ¡|d� t
||ddd� d S )Né90  éd   rC   )r?   g      $@rä   r9   ç›+¡†›„=©ÚatolrÍ   )r   r   r   Z	lognormalÚchoicerD   Úcopyr   r    Úlog10r
   )Úvalsr:   Zorig_weightsr6   r6   r7   Útest_weights_intactý  s    rì   c                  C   sf   t j d¡ g d¢} g d¢}tj| |d�}tj| t  |¡d�}g d¢}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   ÚAssertionErrorr
   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  g d¢¡}t  g d¢g d¢g d¢g¡}|  ||d¡}zt |j¡ W nR tj	y¦   d}t
tj	|d�� t |j¡ W d   ƒ n1 s˜0    Y  Y n0 d S )	Nl   SDÐG.¿ )r   r…   é   )rZ   r…   r   )r…   rµ   r   )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_gh10205G  s    rü   c                  C   sh   t j d¡} | jt  d¡t  d¡dd�}d}tjt|d�� t	 
|¡ W d   ƒ n1 sZ0    Y  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_gh17436V  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