a
    BCCfO                     @   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      {Gz?      ?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   Y/var/www/html/django/DPS/env/lib/python3.9/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}Ô%ITr   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)gn,?gǻe??gW[3?ga )?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=?gH꟫?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 )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.
    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sJ 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	   Fgu	\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   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 s0    Y  d}t	j
t|d
 |g d W d    n1 s0    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   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 )N90  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rtjd}| j ||d d S )	N   gvIh%<=)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 s0    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