o
    Ö­jùO  ã                   @   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éîÀ… éô  é   )Úddoféùÿÿÿé   éõ  ©ÚlocÚscaler   é   ç{®Gáz„?ç      à?©Údecimalé   )ÚnpÚrandomÚseedÚrandnÚmeanÚ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© r8   úZ/var/www/html/CropPilot/venv/lib/python3.10/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 )Nr   r   ©Úweightsr   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   ÚrandÚaverageÚsqrtr   r"   r#   r$   r%   r&   r   r'   r(   r)   r   r*   r+   r,   )r-   r.   Úwnr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r8   r9   Útest_kde_1d_weighted)   s0   

ÿ
ÿrA   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    Ú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.   r1   ÚxÚyÚgrid_coordsr3   r4   r5   ÚsmallÚlarger6   r7   r8   r8   r9   Útest_kde_2dI   s6   

ÿ"
ÿ
ÿ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 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   rB   rC   rD   rE   rF   r;   r   r   rH   rI   r   r   r   r   rK   rL   r   r   )r   r   r   rM   rN   rO   r=   r   r"   rP   rQ   rR   r$   rS   r&   rT   r   r'   r*   r   r+   r,   )r-   r    rU   r.   r@   r1   rV   rW   rX   r3   r4   r5   rY   rZ   r6   r7   r8   r8   r9   Útest_kde_2d_weightedq   s8   
ÿ"
ÿ
ÿr\   c            
      C   ó¢   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   ó   t  | jd| jd  ¡S ©z*Same as default, just check that it works.g      ð¿é   )r   ÚpowerÚnÚd©Úkde_objr8   r8   r9   Úscotts_factor›   ó   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©
rf   r-   r.   r1   Úgkde2Úgkde3r2   r3   Úkdepdf2Úkdepdf3r8   r8   r9   Útest_kde_bandwidth_methodš   ó   





rv   c            
      C   r]   )
Nc                 S   r^   r_   )r   ra   Úneffrc   rd   r8   r8   r9   rf   µ   rg   z9test_kde_bandwidth_method_weighted.<locals>.scotts_factorr   rh   ri   r   r   rk   rl   rm   rq   r8   r8   r9   Ú"test_kde_bandwidth_method_weighted´   rw   ry   c                   @   ó   e Zd Zdd„ ZdS )Ú_kde_subclass1c                 C   s0   t  |¡| _| jj\| _| _| j| _|  ¡  d S ©N)	r   Ú
atleast_2dÚdatasetÚshaperc   rb   rf   Úcovariance_factorÚ_compute_covariance©Úselfr~   r8   r8   r9   Ú__init__Ó   s   z_kde_subclass1.__init__N)Ú__name__Ú
__module__Ú__qualname__r„   r8   r8   r8   r9   r{   Ò   ó    r{   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_kde_subclass2c                    s   | j | _tƒ  |¡ d S r|   )rf   r€   Úsuperr„   r‚   ©Ú	__class__r8   r9   r„   Û   s   z_kde_subclass2.__init__)r…   r†   r‡   r„   Ú__classcell__r8   r8   r‹   r9   r‰   Ú   s    r‰   c                   @   rz   )Ú_kde_subclass4c                 C   s   d|   ¡  S )Nr   )Úsilverman_factor)rƒ   r8   r8   r9   r€   á   s   z _kde_subclass4.covariance_factorN)r…   r†   r‡   r€   r8   r8   r8   r9   rŽ   à   rˆ   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   r`   é   ©Údtypeéöÿÿÿé
   rh   ©Únum©Únulp)gœn—,°?gÇ»e‡?°?gWÍ[3®?g¥a úà)¶?gKd8ú;´?é   r   c                      s   ˆ j S r|   )rn   r8   ©Úkder8   r9   Ú<lambda>  s    z/test_gaussian_kde_subclassing.<locals>.<lambda>)r   rM   Úfloatr#   r   r"   r{   r	   r‰   rŽ   r   r€   r�   )Úx1r2   ÚysÚkde1Úy1Úkde2Úy2Úkde4Úy4Ú
y_expectedÚkde5Úy5r8   rœ   r9   Ú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   ri   Úscottr   r   )r   rM   rŸ   r#   r   r"   Úset_bandwidthr   )r    r2   r¨   r�   r¥   r8   r8   r9   Ú$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–   rh   r—   Ú	silvermanri   r™   N)
r   rM   rŸ   r#   r   r"   r�   r€   r�   r	   )r    r2   r�   r£   r¤   r¥   r8   r8   r9   Ú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¨   r8   r8   r9   Útest_kde_integer_input.  s   

r´   )Úfloat32Úfloat64Úfloat96Úfloat128Úint32Úint64Úbw_typer¬   r¯   r”   c                 C   s¼   t t| d ƒ} |dv r|}nt t|d ƒ}|r|dƒnd }tdd„ | |fD ƒƒr*t ¡  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 r|   r8   )Ú.0Údtr8   r8   r9   Ú	<genexpr>E  s   € z(test_kde_output_dtype.<locals>.<genexpr>r’   r“   )rj   r<   )Úgetattrr   ÚanyÚpytestÚskipr³   r   r"   r”   Úresult_typer¶   rn   )r”   r»   Úbwr<   r~   ÚkÚpointsÚresultr8   r8   r9   Útest_kde_output_dtype9  s   ÿrÉ   c                  C   sl   t j d¡} |  d¡}t |¡}|  d¡}d}tjt|d�� | 	|¡ W d   ƒ d S 1 s/w   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_rngÚstandard_normalr   r"   rÂ   r   rp   Úlogpdf)Úrngr.   r1   r2   Úmsgr8   r8   r9   Ú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   rh   éñÿÿÿé   é   r   )r   r   r   r   r   r"   r#   r$   r&   r   ÚlogrÎ   )r-   r.   r1   r2   r&   Úpdf2rÎ   Úlogpdf2r8   r8   r9   Ú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   rh   r;   rÒ   rÓ   rÔ   r   )r   r   r   r   r=   r   r"   r#   r$   r&   r   rÕ   rÎ   Úlen)	r-   r.   r@   r1   r2   r&   rÖ   rÎ   r×   r8   r8   r9   Ú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‹& rh   r–   rF   r¼   )	r   r   r¼   r`   r’   r›   r   é   é	   c                    s(   ‡‡‡ fdd„}t  |tj tj¡d S )Nc                    s"   t  | gˆˆ  f¡} ˆ | ¡d S ©Nr   )r   Úconcatenater&   )rV   ©Ú
dimensionsr�   Úpointr8   r9   Úfœ  s   z<test_marginal_1_axis.<locals>.marginal_pdf_single.<locals>.fr   )r   Úquadr   r)   ©râ   rã   ©rá   r�   ©râ   r9   Úmarginal_pdf_single›  s   z1test_marginal_1_axis.<locals>.marginal_pdf_singlec                    s   t jˆ d| d�S )Nr   ©ÚaxisÚarr©r   Úapply_along_axis)rÇ   )rè   r8   r9   Úmarginal_pdf¡  s   z*test_marginal_1_axis.<locals>.marginal_pdfç�íµ ÷Æ°>©Úrtol©
r   r   rÌ   ÚnormalrM   r   r"   Úmarginalr&   r
   ©	rÏ   Ún_dataÚn_dimr~   rÇ   rô   r&   rî   Úrefr8   )rá   r�   rè   r9   Ú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Û   é   r`   rF   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   rM   r&   )rW   rV   ÚwÚzrà   r8   r9   rã   ¹  s   zRtest_marginal_2_axis.<locals>.marginal_pdf.<locals>.marginal_pdf_single.<locals>.fr   )r   Údblquadr   r)   rå   ræ   rç   r9   rè   ¸  s   "zGtest_marginal_2_axis.<locals>.marginal_pdf.<locals>.marginal_pdf_singler   ré   rì   )rÇ   rè   ræ   r8   r9   rî   ·  s   z*test_marginal_2_axis.<locals>.marginal_pdfrï   rð   rò   rõ   r8   ræ   r9   Ú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_w   Y  d}t	j
t|d
�� | g d¢¡ W d   ƒ n1 sw   Y  d}t	j
t|d
�� | g d¢¡ W d   ƒ d S 1 s w   Y  d S )NrÛ   rú   r`   rF   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   rp   )rÏ   rö   r÷   r~   rÇ   r�   Údimensions1Ú	marginal1Úpdf1Údimensions2Ú	marginal2rÖ   Úmessager8   r8   r9   Útest_marginal_ivÆ  s2   



ÿÿ"ÿ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 r8   )r   r   r   )r½   rb   ©Ú	n_samplesr8   r9   Ú
<listcomp>ò  s    z(test_logpdf_overflow.<locals>.<listcomp>r   F)r   r   r   rM   Úranger   r"   rÎ   r³   Útestingr   ÚisneginfÚisnan)Ún_dimensionsr.   r1   rÎ   r8   r  r9   Ú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   rF   )rB   g      $@r  r;   ç›+¡†›„=©Úatolrñ   )r   r   r   Ú	lognormalÚchoicerG   Úcopyr   r"   Úlog10r
   )Úvalsr<   Úorig_weightsr8   r8   r9   Ú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   r`   rÜ   é   r;   )g333333Ó?é   éX   r  r  )r   r   r   r   r"   r¶   r
   r$   )Úvaluesr<   Úpdf_iÚpdf_fr.   r8   r8   r9   Ú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ƒrdtj d¡}| j ||d� d S d S )	NéÈ   g‚vIhÂ%<=)r  i?  )r   éŠ   rÌ   iÒ  )	Úresamplero   ÚAssertionErrorr
   r   r   ÚRandomStateÚhasattrrÌ   )Ú
gkde_trailÚn_sampleÚsamp1Úsamp2r   Úrstate1Úrstate2rÏ   r8   r8   r9   Útest_seed_sub  s&   


ÿýz test_seed.<locals>.test_seed_subr   r   r;   rB   rC   rD   rE   rF   )
r   r   r   r=   r   r   r"   rM   rN   rO   )r0  r-   r@   Úxn_1dÚgkde_1dÚgkde_1d_weightedr    rU   Úxn_2dÚgkde_2dÚgkde_2d_weightedr8   r8   r9   Ú	test_seed  s    

r7  c                  C   s°   t j d¡} t  g d¢¡}t  g d¢g d¢g d¢g¡}|  ||d¡}z	t |j¡ W d S  tj	yW   d}t
tj	|d�� t |j¡ W d   ƒ Y d S 1 sOw   Y  Y d S w )	Nl   SDÐG.¿ )r   r–   é   )r`   r–   r   )r–   rÔ   r   )r   r   r  iè  z:The data appears to lie in a lower-dimensional subspace...rÊ   )r   r   rÌ   rM   rN   r   r"   rO   r   ÚLinAlgErrorro   )rÏ   ÚmuÚsigmaÚdatarÐ   r8   r8   r9   Ú%test_singular_data_covariance_gh10205G  s   &ÿþr=  c                  C   sj   t j d¡} | jt  d¡t  d¡dd�}d}tjt|d�� t	 
|¡ W d   ƒ d S 1 s.w   Y  d S )Nl   Ìû&ž8*c r¼   r’   rF   z9Number of dimensions is greater than number of samples...rÊ   )r   r   rÌ   rN   ÚzerosÚeyerÂ   r   rp   r   r"   )rÏ   Úrvsr  r8   r8   r9   Ú)test_fewer_points_than_dimensions_gh17436V  s   "ÿrA  )/Úscipyr   r   r   Únumpyr   Únumpy.testingr   r   r   r   r	   r
   rÂ   r   ro   r:   rA   ÚmarkÚxslowr[   r\   rv   ry   r"   r{   r‰   rŽ   r«   r®   r°   r´   Ú_ftypesÚparametrizerÉ   rÑ   rØ   rÚ   rù   rþ   r  r  r  r#  r7  r=  rA  r8   r8   r8   r9   Ú<module>   sL      
'
($
%
2