o
    ?HhO                     @   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      {Gz?      ?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   ]/home/air/sanwanet/gpt-api/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}Ô%ITr   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)gn,?gǻe??gW[3?ga )?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=?gH꟫?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 )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   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	   Fgu	\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 sw   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 )N90  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   gvIh%<=)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