o
    i                  	   @   s4  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlZ	d dl
mZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d d	lm Z  G d
d dZ!dde! ifddg difddg difdde! ifdde! ifde! d dfgZ"ej#j$dkrej#j%dk rdZ&ndZ&dd edfdd e'e&fdd e(dfdd edfd d edfd!d e'd"fgZ)d#d edfd$d edfd%d e'e&fd&d e(dfd'd e'd"fgZ*d(d e'e&fd)d e(dfd*d edfd+d edfd,d e'd"fgZ+g d-fd.d/ggd0fd1d2e	j,d3gd4fd1d2e	j-d3gd4fd/d/gd5fgZ.d6e/d7fd8e/d7fgZ0d9ed:fd;ed:fgZ1d<ed:fe	j-e	j-fed:fe	j- e	j- fed:fe	j-e	j- fed:fe	j- e	j,fe/d=fe	j,e	j-fe/d=fgZ2d e	j,fe/d=fe	j,e	j,fe/d=fgZ3ej45d>e1e0 e3 ej45d?e"d@dA Z6ej45d?e"dBdC Z7dDdE Z8dFdG Z9ej45d?e"dHdI Z:ej45dJg dKdLdM Z;dNdO Z<dkdRdSZ=dldUdVZ>dWdX Z?ej45dYg dZd[d\ Z@ej45dYddgG d]d^ d^ZAG d_d` d`ZBG dadb dbZCG dcdd ddZDG dedf dfZEG dgdh dhZFG didj djZGdS )m    N)deepcopy)assert_allcloseassert_equalsuppress_warnings)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteSimpleRatioUniformsUNURANError)stats)special)	chisquarecramervonmises)distdiscretedistcont)check_random_statec                   @   $   e Zd Zdd Zdd Zdd ZdS )StandardNormalc                 C   s&   dt dt j  t d| |  S N      ?       @      ࿩npsqrtpiexpselfx r"   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/scipy/stats/tests/test_sampling.pypdf   s   &zStandardNormal.pdfc                 C   s,   dt dt j  |  t d| |  S r   r   r   r"   r"   r#   dpdf#   s   ,zStandardNormal.dpdfc                 C   s
   t |S N)r   Zndtrr   r"   r"   r#   cdf&      
zStandardNormal.cdfN__name__
__module____qualname__r$   r%   r'   r"   r"   r"   r#   r      s    r   r   distr   ){Gz?
ףp=
?皙?r   r	   r
   r   )r-   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                 C      |  S r&   r"   r!   r"   r"   r#   <lambda>>       r8   z...c                 C      g S r&   r"   r7   r"   r"   r#   r8   @       c                 C      t S r&   foor7   r"   r"   r#   r8   B   r;   name 'foo' is not definedc                 C      t jS r&   r   infr7   r"   r"   r#   r8   D   r9   c                 C   r@   r&   r   nanr7   r"   r"   r#   r8   F   r9   c                   C      dS Nr   r"   r"   r"   r"   r#   r8   H   r;   ,takes 0 positional arguments but 1 was givenc                 C   r@   r&   rA   r7   r"   r"   r#   r8   O   r9   c                 C   r@   r&   rC   r7   r"   r"   r#   r8   Q   r9   c                 C   r:   r&   r"   r7   r"   r"   r#   r8   S   r;   c                 C   r<   r&   r=   r7   r"   r"   r#   r8   U   r;   c                   C   rE   rF   r"   r"   r"   r"   r#   r8   W   r;   c                 C   r:   r&   r"   r7   r"   r"   r#   r8   ^   r;   c                 C   r<   r&   r=   r7   r"   r"   r#   r8   `   r;   c                 C   r@   r&   rA   r7   r"   r"   r#   r8   b   r9   c                 C   r@   r&   rC   r7   r"   r"   r#   r8   d   r9   c                   C   rE   rF   r"   r"   r"   r"   r#   r8   f   r;   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r0   )must contain only finite / non-nan values(must contain at least one non-zero value)      r4   zmust be a length 2 tupler"   )rN   rM   zleft >= right)rM   rM   )r5   r5   zonly non-nan valuesdomain, err, msgzmethod, kwargsc                 C   sV   t tj|}tj||d |di |d| i W d    d S 1 s$w   Y  d S )Nmatchdomainr"   )getattrr   samplingpytestraises)rR   errmsgmethodkwargsMethodr"   r"   r#   test_bad_domain   s   "r\   c           
      C   s  t tj| }d}|di |d|i}|di |d|i}t|d|d tjd |di |}|d}tjd  |di |ddi}|d}t|| tjtj	d}tj
tj	d}	|di |d|i}|di |d|	i}t|d|d d S )N{   random_stated   r"   )rS   r   rT   r   rvsr   randomseedRandomStateZMT19937	Generator)
rY   rZ   r[   rb   rng1rng2rvs1rvs2Zseed1Zseed2r"   r"   r#   test_random_state   s"   


ri   c                  C   sr   t t dd} t t }|d t| d|d t t dd}|d}|d |d}t|| d S )Nr]   r^   r_   )r   r   Zset_random_stater   r`   )re   rf   rngrg   rh   r"   r"   r#   test_set_random_state   s   




rl   c                     s   d d dG dd d  fdd}  fdd}t j| d}t j|d}|  |  |  |  d	 d
ks>J d dksFJ d S )N)err1err2c                   @   r   )z.test_threading_behaviour.<locals>.Distributionc                 S   
   || _ d S r&   )pdf_msg)r    rp   r"   r"   r#   __init__   r(   z7test_threading_behaviour.<locals>.Distribution.__init__c                 S   s(   d|  k r
dk rn |S t | j|S )Ng33333H@g      I@)
ValueErrorrp   r   r"   r"   r#   r$      s   
z2test_threading_behaviour.<locals>.Distribution.pdfc                 S   rE   NrM   r"   r   r"   r"   r#   r%         z3test_threading_behaviour.<locals>.Distribution.dpdfN)r*   r+   r,   rq   r$   r%   r"   r"   r"   r#   Distribution       ru   c               
      \    d} t | ddd}z|d W d S  ty- } z|jd d< W Y d }~d S d }~ww )Nr>   r5   r_      rR   r^   順 r   rm   r   r`   rr   argsr-   rk   eru   errorsr"   r#   func1      z'test_threading_behaviour.<locals>.func1c               
      rw   )Nbarrx   rN   rz   r{   r   rn   r|   r~   r   r"   r#   func2   r   z'test_threading_behaviour.<locals>.func2)targetrm   r>   rn   r   )	threadingThreadstartjoin)r   r   t1t2r"   r   r#   test_threading_behaviour   s   
		r   c                 C   sP   t tj| }|di |ddi}t|}t|}t|d|d d S )Nr^   r]   r_   r"   )rS   r   rT   pickledumpsloadsr   r`   )rY   rZ   r[   re   objrf   r"   r"   r#   test_pickle   s
   

r   size)Nr   )r   rM   )r5   r4   )rN   r4         )r   r   )r   rM   c                 C   sR   t t }| d u rt|| sJ d S t| r| f} || j| ks'J d S r&   )r   r   r   Zisscalarr`   shape)r   rk   r"   r"   r#   test_rvs_size  s   

r   c                  C   s   t  } tjd}t| |d}tjdddd}t|| |    t| 	||	| t jddd} t| |d}t|| |    t| 	||	| t 
d	d
} t| |d}|  }| t|d |d d }t|||    d S )Nr   rj   rM   r_   num      $@      @)locscaler5   rI   )r   normr   ra   default_rngr
   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r-   urngrk   urR   pvr"   r"   r#   test_with_scipy_distribution  s   r   Hz>皙?c                 C   sn   |  d}| | f}t|d rt||||d |  d}t|j|_t||jj	}|dks5J d S )Nr{   rM   rtolatoli  r   )
r`   meanvarr   isfiniter   Z	vectorizer'   r   pvalue)rk   r-   mv_exr   r   r`   mvpvalr"   r"   r#   r   '  s   

r   MbP?c                 C   s   |  d}| | f}t||||d ||  }t|}tj|dd\}}	|	|	  }	|	|d |	j< t	||j
}
|
dksBJ d S )Nr{   r   T)Zreturn_countsr   )r`   r   r   r   sumr   Z
zeros_likeuniquer   r   r   )rk   r   r   r   r   r`   r   Z	obs_freqs_Zfreqsr   r"   r"   r#   r   4  s   

r   c                  C   s   d} t jt| d tt ddd W d    n1 sw   Y  t jt| d tt dd W d    d S 1 s;w   Y  d S )Nz.102 : center moved into domain of distributionrP   r   r4   r   )centerrR   rR   )rU   warnsRuntimeWarningr	   r   )rX   r"   r"   r#   !test_warning_center_not_in_domainD  s   "r   rY   )r   r	   r   c                 C   sT   t tj| }d}tjt|d |t ddd W d    d S 1 s#w   Y  d S )Nz17 : mode not in domainrP   r   r   )r1   rR   )rS   r   rT   rU   rV   r   r   )rY   r[   rX   r"   r"   r#   test_error_mode_not_in_domainN  s
   "r   c                   @   s   e Zd Zdd ZdejjdddejjdddgZde	 fdd	d
dgZ
de	 fde	 fdgZejdeejde
ejdedd Zdd ZdS )TestQRVSc                 C   s   d}t jt|d ttj|}|t }|jdd W d    n1 s%w   Y  ttj|}|t }d}t jt|d |jdtj	dd W d    d S 1 sUw   Y  d S )	Nz&`qmc_engine` must be an instance of...rP   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r4   rN   dr   )
rU   rV   rr   rS   r   rT   r   qrvsqmcHalton)r    rY   rQ   r[   genr"   r"   r#   test_input_validation_  s   

"zTestQRVS.test_input_validationNrM   r   rb   r4   )rM   )rM   )r   r   )r   r   )rN   r   r   )r4   )r4   qrngsize_in, size_outzd_in, d_outc                 C   sH  t jdkot d dk}|r|dkrtd t }ttj|}	|	|}
|d urV|d urV|j	|krVd}tj
t|d |
j|||d W d    d S 1 sOw   Y  d S |d u rg|d urg|j	d	krg|j	f}|| }t|}|
j|||d
}|d ur|j|ksJ |d ur|t|pd	}tj||}t||dd d S d S )Nwin32r   32bitr	   z4NumericalInversePolynomial.qrvs fails for Win 32-bitr   rP   r   rM   r   r   r   -q=r   )sysplatformarchitecturerU   xfailr   rS   r   rT   r   rV   rr   r   r   r   ra   r   prodr   r   reshaper   )r    r   size_insize_outZd_inZd_outrY   Zw32r-   r[   r   rQ   Zshape_expectedqrng2r   uniformqrvs2r"   r"   r#   test_QRVS_shape_consistencyu  s4   

z$TestQRVS.test_QRVS_shape_consistencyc                 C   s   t  }ttj|}||}d}d}tjj|dd}tjj|dd}|t|}	|j	|||d}
tj
|	}t|D ]}|
d|f }|d d |f |}t||dd q;d S )	N)r4   r   r   r   r   r   .r   r   )r   rS   r   rT   r   r   ra   r   r   r   r   r   ranger   r   )r    rY   r-   r[   r   r   r   r   r   r   r   r   isampleZsample2r"   r"   r#   test_QRVS_size_tuple  s   zTestQRVS.test_QRVS_size_tuple)r*   r+   r,   r   r   r   ZSobolr   ZqrngstuplesizesZdsrU   markparametrizer   r   r"   r"   r"   r#   r   \  s    ""r   c                
   @   s  e Zd ZG dd dZG dd dZG dd dZe e ededgZdd	gZdd
gZde	j
gZde	j
gZeeeegZejdeeedd Zdd edfgZee7 Zejdedd Zejdedd Zejdedd Zejdg ddd Zdd Zejd d!e	je	j
d"d#gd$d% Ze	jd&d'd(d)g g ge	jge	j
 e	je	j
gd&e	jd*d"gd+d,e	j
gg d-ggZ ejd.e d/d0 Z!d1d2 Z"d3S )4TestTransformedDensityRejectionc                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z%TestTransformedDensityRejection.dist0c                 C      dd||   S N      ?rM   r"   r   r"   r"   r#   r$        z)TestTransformedDensityRejection.dist0.pdfc                 C   s   dd|  S )Nr   r"   r   r"   r"   r#   r%        z*TestTransformedDensityRejection.dist0.dpdfc                 C      d||d d  d  S Nr   r4   gUUUUUU?r"   r   r"   r"   r#   r'        z)TestTransformedDensityRejection.dist0.cdfc                 C   rE   N)rM   r"   r    r"   r"   r#   r     rt   z-TestTransformedDensityRejection.dist0.supportNr*   r+   r,   r$   r%   r'   r   r"   r"   r"   r#   dist0  
    r   c                   @   r   )z%TestTransformedDensityRejection.dist1c                 C      t j|d S Nr   r   r   Z_pdfr   r"   r"   r#   r$     r   z)TestTransformedDensityRejection.dist1.pdfc                 C   s   | d t j|d  S )N{Gz?r   r   r   r"   r"   r#   r%        z*TestTransformedDensityRejection.dist1.dpdfc                 C   r   r   r   r   Z_cdfr   r"   r"   r#   r'     r   z)TestTransformedDensityRejection.dist1.cdfNr)   r"   r"   r"   r#   dist1      r  c                   @   r   )
z%TestTransformedDensityRejection.dist2c                 C   ro   r&   shiftr    r  r"   r"   r#   rq     r(   z.TestTransformedDensityRejection.dist2.__init__c                 C   &   || j 8 }dt|d  }d| | S Nr         ?r  absr    r!   yr"   r"   r#   r$        
z)TestTransformedDensityRejection.dist2.pdfc                 C   s8   || j 8 }dt|d  }|| | }|dk r|S | S )Nr   rH   r
  r  r"   r"   r#   r%     s   
z*TestTransformedDensityRejection.dist2.dpdfc                 C   .   || j 8 }|dkrdd|  S ddd|   S NrH   r	  r   r  r   r"   r"   r#   r'        
z)TestTransformedDensityRejection.dist2.cdfN)r*   r+   r,   rq   r$   r%   r'   r"   r"   r"   r#   dist2  s
    r  rH        @?r   dist, mv_exc                 C   sL   t  }|t t|dd}W d    n1 sw   Y  t||| d S N*   rj   )r   filterr   r   r   )r    r-   r   suprk   r"   r"   r#   
test_basic  s
   
z*TestTransformedDensityRejection.test_basicc                 C   rE   )Nr   r"   r7   r"   r"   r#   r8     r;   z(TestTransformedDensityRejection.<lambda>50 : bad construction points.pdf, err, msgc                 C   sZ   G dd d}||_ dd |_tj||d t| W d    d S 1 s&w   Y  d S )Nc                   @      e Zd ZdS )z:TestTransformedDensityRejection.test_bad_pdf.<locals>.distNr*   r+   r,   r"   r"   r"   r#   r-         r-   c                 S   rE   rs   r"   r7   r"   r"   r#   r8     r;   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>rP   r$   r%   rU   rV   r   r    r$   rW   rX   r-   r"   r"   r#   test_bad_pdf  s   

"z,TestTransformedDensityRejection.test_bad_pdfzdpdf, err, msgc                 C   s^   G dd d}dd |_ ||_tj||d t|dd W d    d S 1 s(w   Y  d S )Nc                   @   r  )z;TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNr  r"   r"   r"   r#   r-     r  r-   c                 S   s   | S r&   r"   r7   r"   r"   r#   r8     r;   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>rP   rM   r5   r   r   )r    r%   rW   rX   r-   r"   r"   r#   test_bad_dpdf  s   
"z-TestTransformedDensityRejection.test_bad_dpdfrO   c                 C   B   t j||d tt |d W d    d S 1 sw   Y  d S NrP   r   )rU   rV   r   r   r    rR   rW   rX   r"   r"   r#   test_inf_nan_domains     "z4TestTransformedDensityRejection.test_inf_nan_domainsconstruction_points)r   r   r   c                 C   sB   t jtdd tt |d W d    d S 1 sw   Y  d S )Nz1`construction_points` must be a positive integer.rP   r*  rU   rV   rr   r   r   r    r*  r"   r"   r#   #test_bad_construction_points_scalar  s
   "zCTestTransformedDensityRejection.test_bad_construction_points_scalarc                 C   s  g }t jtdd tt |d W d    n1 sw   Y  g d}t jtdd tt |d W d    n1 s=w   Y  tjtjtjg}t jt	dd tt |d W d    n1 scw   Y  ddg}t jtd	d tt d
|d W d    d S 1 sw   Y  d S )NzC`construction_points` must either be a scalar or a non-empty array.rP   r+  )rM   rM   rM   rM   rM   rM   z:33 : starting points not strictly monotonically increasingr  r5   z!50 : starting point out of domain)r4   )rR   r*  )
rU   rV   rr   r   r   r   r   r   rD   r   r-  r"   r"   r#   "test_bad_construction_points_array#  s2   "zBTestTransformedDensityRejection.test_bad_construction_points_arrayc      r   r   c                 C   sF   d}t jt|d tt dd W d    d S 1 sw   Y  d S )Nz`c` must either be -0.5 or 0.rP   r3  )r2  r,  )r    r2  rX   r"   r"   r#   
test_bad_cG  s   "z*TestTransformedDensityRejection.test_bad_cr   rM   i  r   r	  rI   rJ   r   r4   r   r   c                 C   s   t t dd}t +}|td |td |td |td ||}tj|}W d    n1 s8w   Y  t	||ddd	 |j
|j
ksMJ d S )
NgH.?)Zmax_squeeze_hat_ratio$invalid value encountered in greater*invalid value encountered in greater_equal!invalid value encountered in less'invalid value encountered in less_equalr   h㈵>r   )r   r   r   r  r   Zppf_hatr   r   r   r   r   )r    r   rk   r  resexpectedr"   r"   r#   test_ppf_hatQ  s   
	z,TestTransformedDensityRejection.test_ppf_hatc                 C   s   G dd d}d}t jt|d t| W d    n1 sw   Y  G dd d}d}t jt|d t| W d    d S 1 sDw   Y  d S )Nc                   @   r  );TestTransformedDensityRejection.test_bad_dist.<locals>.distNr  r"   r"   r"   r#   r-   g  r  r-   z`pdf` required but not found.rP   c                   @      e Zd Zdd ZdS )r>  c                 S   s   d| |   S rs   r"   r7   r"   r"   r#   r8   p  s    zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>Nr*   r+   r,   r$   r"   r"   r"   r#   r-   o      z`dpdf` required but not found.)rU   rV   rr   r   )r    r-   rX   r"   r"   r#   test_bad_diste  s   

"z-TestTransformedDensityRejection.test_bad_distN)#r*   r+   r,   r   r  r  distsmv0mv1r   rB   mv2mv3mvsrU   r   r   zipr  r   Zbad_pdfsbad_pdfs_commonr"  bad_dpdf_commonr$  inf_nan_domainsr(  r.  r1  rD   r4  r   r   r=  rB  r"   r"   r"   r#   r     sD    







$

r   c                	   @   s8  e Zd Zh dZejdedd Zdd e	dfdd e	dfd	d e	d
fdd e
dfdd e	dfdd edfdd edfgZejdedd Zejdg dg dgdd Zejdedd Zej ejfejejfej ej fdejfej dfgZejded d! Zd"d# Zd$d% Zd&d' Zd(S ))TestDiscreteAliasUrn>   randintnchypergeom_walleniusnchypergeom_fisherdistname, paramsc           
      C      || j v rd}t| t|ts|}ntt|}|| }| }t	|d |d  s1td t
|d |d d }||}|d}t|dd}	t|	|| d S )NzYDAU fails on these probably because of large domains and small computation errors in PMF.rM   r   z$DAU only works with a finite domain.r   r  rj   )basic_fail_distsrU   skip
isinstancestrrS   r   r   r   r   r   r   r   r   
r    distnameparamsrX   r-   rR   kr   r   rk   r"   r"   r#   r    s   






zTestDiscreteAliasUrn.test_basicc                 C   r@   r&   rA   r7   r"   r"   r#   r8     r9   zTestDiscreteAliasUrn.<lambda>rK   c                 C   r@   r&   rC   r7   r"   r"   r#   r8     r9   c                 C   rE   )NrH   r"   r7   r"   r"   r#   r8     r;   rL   c                 C   r<   r&   r=   r7   r"   r"   r#   r8     r;   r?   c                 C   r:   r&   r"   r7   r"   r"   r#   r8     r;   z)setting an array element with a sequence.c                 C   r6   r&   r"   r7   r"   r"   r#   r8     r9   z50 : probability < 0c                   C   rE   rF   r"   r"   r"   r"   r#   r8     r;   rG   zpmf, err, msgc                 C   sT   G dd d}||_ tj||d t|dd W d    d S 1 s#w   Y  d S )Nc                   @   r  )z/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNr  r"   r"   r"   r#   r-     r  r-   rP   r#  r   )r   rU   rV   r   )r    r   rW   rX   r-   r"   r"   r#   test_bad_pmf  s
   "z!TestDiscreteAliasUrn.test_bad_pmfr   )r/   r.   r0   )r   r   g      @      @r   g      @c                 C   s~   t j|t jd}t|dd}|d ||  }t dt|}t j||d}t j|| d |d}||f}t	||| d S )N)Zdtyper]   rj   r{   r   )weightsrN   )
r   ZasarrayZfloat64r   r`   r   r   lenZaverager   )r    r   rk   ZvariatesZ
m_expectedZ
v_expectedZmv_expectedr"   r"   r#   test_sampling_with_pv  s   
z*TestDiscreteAliasUrn.test_sampling_with_pvpv, msgc                 C   <   t jt|d t| W d    d S 1 sw   Y  d S NrP   rU   rV   rr   r   r    r   rX   r"   r"   r#   test_bad_pv     
"z TestDiscreteAliasUrn.test_bad_pvr   rR   c                 C   H   t jtdd ttdd|d W d    d S 1 sw   Y  d S Nzmust be finiterP   r5   rI   r   )rU   rV   rr   r   r   r   r    rR   r"   r"   r#   test_inf_domain     "z$TestDiscreteAliasUrn.test_inf_domainc                 C   sD   t jtdd tddgdd W d    d S 1 sw   Y  d S )Nzrelative urn size < 1.rP   r	  r   )Z
urn_factor)rU   r   r   r   r   r"   r"   r#   test_bad_urn_factor  s   "z(TestDiscreteAliasUrn.test_bad_urn_factorc                 C   sN   d}G dd d}t jt|d t| W d    d S 1 s w   Y  d S )NzG`domain` must be provided when the probability vector is not available.c                   @   r?  )z0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                 S   s   |S r&   r"   r   r"   r"   r#   r     rt   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmfN)r*   r+   r,   r   r"   r"   r"   r#   r-     rA  r-   rP   rc  )r    rX   r-   r"   r"   r#   test_bad_args  s
   
"z"TestDiscreteAliasUrn.test_bad_argsc                 C   s0   t td}t|dd}t||ddd d S )N)i  r  rj   )g     @g    
Ag{Gzt?)r   )r   Zsoftmaxr   Zonesr   r   )r    r   rk   r"   r"   r#   test_gh19359  s
   
z!TestDiscreteAliasUrn.test_gh19359N)r*   r+   r,   rS  rU   r   r   r   r  rr   	NameErrorr   	TypeErrorZbad_pmfr[  r_  bad_pv_commonre  r   rB   
inf_domainrj  rl  rm  rn  r"   r"   r"   r#   rM  w  sT    



$
rM  c                   @   sX  e Zd ZG dd dZG dd dZG dd dZG dd dZe e e e gZd	d
gZd	dgZ	de
j dde
jd   gZde
j dde
jd   gZee	eegZejdeeedd Zejjejdedd Zejdedd Zejdedd Zejdedd Ze
jd d!d"d#g g ge
jge
j e
je
jgd e
jd$d%gd&d'e
jgg d(ggZ ejd)e d*d+ Z!e
jd,d-d"d#g g ge
jge
j e
je
jgd e
jd$d%gd&d'e
jge
j d.d/gggZ"ejd0e"d1d2 Z#d3d4 Z$d!d5d6e
je
jgZ%d7d%e
je
jgZ&ejd8e%d9d: Z'ejd;e&d<d= Z(d>d? Z)d@dA Z*dBS )CTestNumericalInversePolynomialc                   @   r   )z$TestNumericalInversePolynomial.dist0c                 C   r   r   r"   r   r"   r"   r#   r$     r   z(TestNumericalInversePolynomial.dist0.pdfc                 C   r   r   r"   r   r"   r"   r#   r'     r   z(TestNumericalInversePolynomial.dist0.cdfc                 C   rE   r   r"   r   r"   r"   r#   r     rt   z,TestNumericalInversePolynomial.dist0.supportNr*   r+   r,   r$   r'   r   r"   r"   r"   r#   r     r  r   c                   @   s   e Zd Zdd Zdd ZdS )z$TestNumericalInversePolynomial.dist1c                 C   r   r   r   r   r"   r"   r#   r$     r   z(TestNumericalInversePolynomial.dist1.pdfc                 C   r   r   r  r   r"   r"   r#   r'     r   z(TestNumericalInversePolynomial.dist1.cdfN)r*   r+   r,   r$   r'   r"   r"   r"   r#   r    s    r  c                   @   r   )z$TestNumericalInversePolynomial.dist2c                 C   s    dddt dt j |    S )N皙??rM   rN   r   sinr   r   r"   r"   r#   r$     s    z(TestNumericalInversePolynomial.dist2.pdfc                 C   sD   d|d  dddt j d|   t dt j |   dt j   S )Nru  rM   g?r   r   r\  r   r   cosr   r"   r"   r#   r'   	  s
   
,z(TestNumericalInversePolynomial.dist2.cdfc                 C   rE   r   r"   r   r"   r"   r#   r     rt   z,TestNumericalInversePolynomial.dist2.supportNrt  r"   r"   r"   r#   r    rv   r  c                   @   r   )z$TestNumericalInversePolynomial.dist3c                 C   s$   ddddt dt j |     S )NrI   ru  rv  rM   rN   rw  r   r"   r"   r#   r$     s   $z(TestNumericalInversePolynomial.dist3.pdfc                 C   s>   |d d ddt j  t dt j t dt j |    S )Nr   r	  g
ףp=
?rN   r5   ry  r   r"   r"   r#   r'     s   $z(TestNumericalInversePolynomial.dist3.cdfc                 C   rE   )N)r   r"   r   r"   r"   r#   r     rt   z,TestNumericalInversePolynomial.dist3.supportNrt  r"   r"   r"   r#   dist3  s    r|  rH   r  r   gܿUUUUUU?gQ?rN   g @r  c                 C   s   t |dd}t||| d S r  )r	   r   r    r-   r   rk   r"   r"   r#   r  *  s   z)TestNumericalInversePolynomial.test_basicrQ  c           	      C   s   g d}g d}dg}||v rt d|  ||v r#t d|  t|tr-tt|n|}|| }t }|t t	|dd}W d    n1 sLw   Y  ||v rWd S t
||| | g d S )N)Zanglit
gausshyperkappa4ksonekstwoZlevy_llevy_stablestudentized_rangeZ	trapezoidZtriangvonmises)	Zchi2ZfatiguelifeZgibratZhalfgennormZlognormncfZncx2ZparetotZrel_breitwignerzPINV too slow for zPINV fails for r  rj   )rU   rT  rU  rV  rS   r   r   r  r   r	   r   r   r   )	r    rX  rY  Zvery_slow_dists
fail_distsZskip_sample_moment_checkr-   r  rk   r"   r"   r#   test_basic_all_scipy_dists0  s&   
z9TestNumericalInversePolynomial.test_basic_all_scipy_distsr  c                 C   X   G dd d}||_ tj||d t|ddgd W d    d S 1 s%w   Y  d S )Nc                   @   r  )z9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNr  r"   r"   r"   r#   r-   T  r  r-   rP   r   r   r   )r$   rU   rV   r	   r!  r"   r"   r#   r"  R  
   "z+TestNumericalInversePolynomial.test_bad_pdfzlogpdf, err, msgc                 C   r  )Nc                   @   r  )z<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNr  r"   r"   r"   r#   r-   \  r  r-   rP   r   r   r   )logpdfrU   rV   r	   )r    r  rW   rX   r-   r"   r"   r#   test_bad_logpdfZ  r  z.TestNumericalInversePolynomial.test_bad_logpdfrO   c                 C   r%  r&  )rU   rV   r	   r   r'  r"   r"   r#   r(  d  r)  z3TestNumericalInversePolynomial.test_inf_nan_domainsr   rM   '  r   r	  r   rI   rJ   r5  r   c                 C      t  }t|dd}t +}|td |td |td |td ||}tj|}W d    n1 s:w   Y  t||ddd |j	|j	ksOJ d S 	N+=u_resolutionr6  r7  r8  r9  gdy=r   )
r   r	   r   r  r   r   r   r   r   r   r    r   r-   rk   r  r;  r<  r"   r"   r#   test_ppfx     
	z'TestNumericalInversePolynomial.test_ppfr/  r5   r4   r   r!   c                 C   r  r  )
r   r	   r   r  r   r'   r   r   r   r   )r    r!   r-   rk   r  r;  r<  r"   r"   r#   test_cdf  r  z'TestNumericalInversePolynomial.test_cdfc                 C   sj   t  }t|dd}| \}}|dk sJ ||ksJ t|dd}| \}}|dk s-J ||ks3J d S Ng|=r  r  )r   r	   u_error)r    r-   rk   	max_errormaer"   r"   r#   test_u_error  s   z+TestNumericalInversePolynomial.test_u_errorg      @   g#B;orderc                 C   sJ   t  }d}tjt|d t||d W d    d S 1 sw   Y  d S )Nz2`order` must be an integer in the range \[3, 17\].rP   r  )r   rU   rV   rr   r	   )r    r  r-   rX   r"   r"   r#   test_bad_orders  s
   "z.TestNumericalInversePolynomial.test_bad_ordersr  c                 C   sF   d}t jt|d tt |d W d    d S 1 sw   Y  d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rP   r  )rU   rV   rr   r	   r   )r    r  rX   r"   r"   r#   test_bad_u_resolution  s   "z4TestNumericalInversePolynomial.test_bad_u_resolutionc                 C   s   G dd d}| }d}t jt|d t|}W d    n1 s"w   Y  t }t|}d}t jt|d |d W d    n1 sGw   Y  G dd d}| }t|}d	}t jt|d |  W d    d S 1 ssw   Y  d S )
Nc                   @   r?  )z=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 S   s   t j|S r&   r  r   r"   r"   r#   r'     r   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdfN)r*   r+   r,   r'   r"   r"   r"   r#   BadDist  rA  r  z9Either of the methods `pdf` or `logpdf` must be specifiedrP   z4`sample_size` must be greater than or equal to 1000.r5   c                   @   r?  )zBTestNumericalInversePolynomial.test_bad_args.<locals>.Distributionc                 S   s   t d| | S )Nr   )r   r   r   r"   r"   r#   r$     s   zFTestNumericalInversePolynomial.test_bad_args.<locals>.Distribution.pdfNr@  r"   r"   r"   r#   ru     rA  ru   z!Exact CDF required but not found.)rU   rV   rr   r	   r   r  )r    r  r-   rX   rk   ru   r"   r"   r#   rm    s&   

"z,TestNumericalInversePolynomial.test_bad_argsc                 C   sh   G dd d}| }dd |_ t|}| }dd |_t|}tjdddd	}t|||| d S )
Nc                   @   r  )zJTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNr  r"   r"   r"   r#   MyDist  r  r  c                 S   s   t |  |  d S NrN   )mathr   r7   r"   r"   r#   r8     s    zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>c                 S   s   |  |  d S r  r"   r7   r"   r"   r#   r8     s    r:  gwJ?r_   r   )r$   r	   r  r   r   r   r   )r    r  Zdist_pdfre   Zdist_logpdfrf   qr"   r"   r#   test_logpdf_pdf_consistency  s   

z:TestNumericalInversePolynomial.test_logpdf_pdf_consistencyN)+r*   r+   r,   r   r  r  r|  rC  rD  rE  r   r   rF  rG  rH  rU   r   r   rI  r  xslowr   r  rJ  r"  bad_logpdfs_commonr  rL  r(  r   rD   rB   r   r  r!   r  r  Z
bad_ordersZbad_u_resolutionr  r  rm  r  r"   r"   r"   r#   rs    s^    
 

	

"


rs  c                
   @   s  e Zd ZG dd dZG dd dZe e gZddej  ddd	ej ej   gZd
dddej ej   d gZ	ee	gZ
ejdeee
ejdddgdd Zejdedd Zdd Zejdejjejdedd Zejddd Zdd Zd d!ejd!gZeejd! d e fd"d#gZejd$eejd%ed&d' Z d(d) Z!d*d+ Z"ej#d,d-d.d/g g gej$gej% ej$ej%gd!ej$d0d1gd2d3ej%gg d4ggZ&ejd5e&d6d7 Z'd8d9 Z(d S ):TestNumericalInverseHermitec                   @   r   )
z!TestNumericalInverseHermite.dist0c                 C   s   ddt dt j |   S )Nr	  r   r   rw  r   r"   r"   r#   r$     s   z%TestNumericalInverseHermite.dist0.pdfc                 C   s   t jt dt j |  S )Nr   ry  r   r"   r"   r#   r%     r   z&TestNumericalInverseHermite.dist0.dpdfc                 C   s4   ddt j d|   t dt j |  dt j  S )Nr   r   rM   r\  ry  r   r"   r"   r#   r'     s   4z%TestNumericalInverseHermite.dist0.cdfc                 C   rE   r   r"   r   r"   r"   r#   r     rt   z)TestNumericalInverseHermite.dist0.supportNr   r"   r"   r"   r#   r     r   r   c                   @   r   )
z!TestNumericalInverseHermite.dist1c                 C   s\   |dkrt dt j | d t j S |dk rdS |dkr,t dt j | d t j S d S )Nr   r   r	  rH   rw  r   r"   r"   r#   r$     s   z%TestNumericalInverseHermite.dist1.pdfc                 C   s`   |dkrt dt j | t j t j S |dk rdS |dkr.t dt j | t j t j S d S )Nr   r   rH   r	  r   rz  r   r   r"   r"   r#   r%     s     z&TestNumericalInverseHermite.dist1.dpdfc                 C   sX   |dkrddt dt j |   S |dk rdS |dkr*ddt dt j |   S d S )Nr   g      ?rM   r   rH   r	  r   r  r   r"   r"   r#   r'     s   z%TestNumericalInverseHermite.dist1.cdfc                 C   rE   )N)r   r	  r"   r   r"   r"   r#   r     rt   z)TestNumericalInverseHermite.dist1.supportNr   r"   r"   r"   r#   r    s
    r  r   rN   r}  rM   r   g      пg      ?g      ?r  r  r4   r   c                 C   s   t ||dd}t||| d S )Nr  )r  r^   )r
   r   )r    r-   r   r  rk   r"   r"   r#   r  &  s   z&TestNumericalInverseHermite.test_basicrO   c                 C   r%  r&  )rU   rV   r
   r   r'  r"   r"   r#   r(  /  r)  z0TestNumericalInverseHermite.test_inf_nan_domainsc           
   	   C   s   h d}h d}||v rt d ||v rt d tjd tt|| }t|}tj	d}t
t|||| t|| }t
t|||| }	|dk s_J |	dk seJ d S )	N>   r  r  Zskewnormr  >   ZnctZinvgaussr  r  r  Zgenhyperbolicr  ZwaldZnorminvgaussZgeninvgaussr  betazDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r5   :0yE>r   )rU   rT  r   r   ra   rb   rS   r   r
   Zrandmaxr  r   r'   )
r    rX  shapesZ
slow_distsr  r-   fnir!   Zp_tolZu_tolr"   r"   r#   basic_test_all_scipy_dists4  s   

0 z6TestNumericalInverseHermite.basic_test_all_scipy_distszignore::RuntimeWarning)rX  r  c                 C   s   |  || d S r&   r  )r    rX  r  r"   r"   r#   r  M  s   z6TestNumericalInverseHermite.test_basic_all_scipy_distsc                 C   s   |  dd d S )NZ	truncnorm)r   rN   r  r   r"   r"   r#   test_basic_truncnorm_gh17155U  s   z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155c                 C   s   d}t jt|d tt dd W d    n1 sw   Y  d}t jt|d td W d    n1 s8w   Y  d}t jt|d tt dd	 W d    d S 1 sYw   Y  d S )
Nz"`order` must be either 1, 3, or 5.rP   rN   r  z`cdf` required but not foundr   z!could not convert string to floatZekkir  )rU   rV   rr   r
   r   )r    rQ   r"   r"   r#   r   Y  s   
"z1TestNumericalInverseHermite.test_input_validationNr   )   )r  )r   r      r  rk   r   c           
      C   st   t  }t|}t|}|j||d}|d ur|j|ksJ |d ur8t|}|j|d}tj	|}	t
||	 d S d S )N)r   r^   )r   )r   r
   r   r`   r   r   r   r   r   r   r   )
r    rk   r   r   r-   r  rf   r`   r   rh   r"   r"   r#   test_RVSk  s   z$TestNumericalInverseHermite.test_RVSc                 C   sZ   d}d}t jt|d ttj|  W d    n1 sw   Y  ttj| dd d S )N)gdsz@g@e?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrP   r  r  )rU   r   r   r
   r   r  )r    r  rQ   r"   r"   r#   test_inaccurate_CDF|  s   z/TestNumericalInverseHermite.test_inaccurate_CDFc                 C   s<   t  }t|}t }t|}t|jdd|jdd d S )Nr   rj   )r   r
   r   r   r   r`   )r    r  Zfni1r  Zfni2r"   r"   r#   test_custom_distribution  s
   z4TestNumericalInverseHermite.test_custom_distributionrH   r   r  r   r	  r   rI   rJ   r5  r   c                 C   s   t  }t|dd}t +}|td |td |td |td ||}tj|}W d    n1 s:w   Y  t||ddd	 |j	|j	ksOJ d S )
Nr   r  r6  r7  r8  r9  g&.>gLa㧝=r   )
r   r
   r   r  r   r   r   r   r   r   r  r"   r"   r#   r    r  z$TestNumericalInverseHermite.test_ppfc                 C   s   t  }t|dd}| \}}|dk sJ ||ksJ t }|t t|dd}W d    n1 s4w   Y  | \}}|dk sEJ ||ksKJ d S r  )r   r
   r  r   r  r   )r    r-   rk   r  r  r  r"   r"   r#   r    s   
z(TestNumericalInverseHermite.test_u_error))r*   r+   r,   r   r  rC  r   r   rD  rE  rH  rU   r   r   rI  r  rL  r(  r  filterwarningsr  r   r  r  r   ra   rc   Zrngsappendr   r   r   r  r  r  r   rD   rB   r   r  r  r"   r"   r"   r#   r    sN    & 




r  c                
   @   s
  e Zd Zh dZdd Zdd Zdd Zej	de
d	d
 Zejddddg g gejgej ejejgdejddgddejgg dggZej	dedd Zej	dedd Zej ejfejejfej ej fdejfej dfgZej	dedd ZdS )TestDiscreteGuideTable>   rN  rO  rP  c                 C   P   g d}t j }tt t||dd W d    d S 1 s!w   Y  d S )Nr   g333333?g333333?r3   r^   Zguide_factorr   ra   r   rU   r   r   r   r    r   r   r"   r"   r#   $test_guide_factor_gt3_raises_warning  
   
"z;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warningc                 C   r  )Nr  r   r  r  r  r"   r"   r#   %test_guide_factor_zero_raises_warning  r  z<TestDiscreteGuideTable.test_guide_factor_zero_raises_warningc                 C   r  )Nr  r   r  r  r  r"   r"   r#   )test_negative_guide_factor_raises_warning  s
   
"z@TestDiscreteGuideTable.test_negative_guide_factor_raises_warningrQ  c           
      C   rR  )NzYDGT fails on these probably because of large domains and small computation errors in PMF.rM   r   z$DGT only works with a finite domain.r   r  rj   )rS  rU   rT  rU  rV  rS   r   r   r   r   r   r   r   r   rW  r"   r"   r#   r    s   






z!TestDiscreteGuideTable.test_basicr   rM   r  r   r	  r   rI   rJ   r5  r   c           	      C   s   d\}}t ||}t|dd}t -}|td |td |td |td ||}t j|||}W d    n1 sCw   Y  t|j|j t|| d S )N)r   r   r  rj   r6  r7  r8  r9  )	r   r   r   r   r  r   r   r   r   )	r    r   npr-   rk   r  r;  r<  r"   r"   r#   r    s   

zTestDiscreteGuideTable.test_ppfr`  c                 C   ra  rb  )rU   rV   rr   r   rd  r"   r"   r#   re    rf  z"TestDiscreteGuideTable.test_bad_pvrR   c                 C   rg  rh  )rU   rV   rr   r   r   r   ri  r"   r"   r#   rj  &  rk  z&TestDiscreteGuideTable.test_inf_domainN)r*   r+   r,   rS  r  r  r  rU   r   r   r   r  r   r   rD   rB   r   r  rq  re  rr  rj  r"   r"   r"   r#   r    s,    	


$r  c                   @   s   e Zd ZG dd dZededgZdejgZdejgZeegZ	e
jdeee	dd Ze
jded	d
 Zdd ZdS )TestSimpleRatioUniformsc                   @   r   )zTestSimpleRatioUniforms.distc                 C   s   || _ || _d S r&   )r  r1   r  r"   r"   r#   rq   1  s   
z%TestSimpleRatioUniforms.dist.__init__c                 C   r  r  r
  r  r"   r"   r#   r$   5  r  z TestSimpleRatioUniforms.dist.pdfc                 C   r  r  r  r   r"   r"   r#   r'   :  r  z TestSimpleRatioUniforms.dist.cdfN)r*   r+   r,   rq   r$   r'   r"   r"   r"   r#   r-   0  s    r-   rH   r  r  c                 C   sF   t ||jdd}t||| t ||j||jdd}t||| d S )Nr  )r1   r^   )r1   Zcdf_at_moder^   )r   r1   r   r'   r~  r"   r"   r#   r  H  s   
z"TestSimpleRatioUniforms.test_basicrO   c                 C   r%  r&  )rU   rV   r   r   r'  r"   r"   r#   r(  T  r)  z,TestSimpleRatioUniforms.test_inf_nan_domainsc                 C   sD   t jtdd tt ddd W d    d S 1 sw   Y  d S )Nz`pdf_area` must be > 0rP   r   r   )r1   Zpdf_area)rU   rV   rr   r   r   r   r"   r"   r#   rm  Y  s   "z%TestSimpleRatioUniforms.test_bad_argsN)r*   r+   r,   r-   rC  r   rB   rE  rF  rH  rU   r   r   rI  r  rL  r(  rm  r"   r"   r"   r#   r  ,  s    




r  )r   r   )r   r   )Hr   r   rU   copyr   r   r   r  numpyr   Znumpy.testingr   r   r   Zscipy.stats.samplingr   r   r   r	   r
   r   r   Zscipyr   r   Zscipy.statsr   r   Zscipy.stats._distr_paramsr   r   Zscipy._lib._utilr   r   Zall_methodsimplementationnameversionZfloaterrrp  ro  rJ  rK  r  rD   rB   rq  rr   Zbad_sized_domainsZbad_domainsrL  Znan_domainsr   r   r\   ri   rl   r   r   r   r   r   r   r   r   r   r   rM  rs  r  r  r  r"   r"   r"   r#   <module>   s    $		
	
1






[ ?u   Wi