a
    ˆù»j–Ú  ã                	   @   sV  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mZ d dl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�rRej&j(dk �rRd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/d0ggd1fd2d3e	j/d4gd5fd2d3e	j0d4gd5fd0d0gd6fgZ1d7e2d8fd9e2d8fgZ3d:ed;fd<ed;fgZ4d=ed;fe	j0e	j0fed;fe	j0 e	j0 fed;fe	j0e	j0 fed;fe	j0 e	j/fe2d>fe	j/e	j0fe2d>fgZ5d e	j/fe2d>fe	j/e	j/fe2d>fgZ6ej7 8d?e4e3 e6 ¡ej7 8d@e%¡dAdB„ ƒƒZ9ej7 8d@e%¡dCdD„ ƒZ:dEdF„ Z;dGdH„ Z<ej7 8d@e%¡dIdJ„ ƒZ=ej7 8dKg dL¢¡dMdN„ ƒZ>dOdP„ Z?dndSdT„Z@dodVdW„ZAdXdY„ ZBej7 8dZg d[¢¡d\d]„ ƒZCej7 8dZddg¡G d^d_„ d_ƒƒZDG d`da„ daƒZEG dbdc„ dcƒZFG ddde„ deƒZGG dfdg„ dgƒZHG dhdi„ diƒZIG djdk„ dkƒZJG dldm„ dmƒZKdS )pé    N)Údeepcopy)Úassert_allcloseÚassert_equalÚsuppress_warnings)ÚTransformedDensityRejectionÚDiscreteAliasUrnÚDiscreteGuideTableÚNumericalInversePolynomialÚNumericalInverseHermiteÚRatioUniformsÚSimpleRatioUniformsÚUNURANError)Úraises)Ústats)Úspecial)Ú	chisquareÚcramervonmises)ÚdistdiscreteÚdistcont)Úcheck_random_statec                   @   s$   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#   úEE:\soccer\ml_env\Lib\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(   s    zStandardNormal.cdfN©Ú__name__Ú
__module__Ú__qualname__r%   r&   r(   r#   r#   r#   r$   r       s   r   r   Údistr   )ç{®Gáz”?ç
×£p=
Ç?çš™™™™™é?r   r	   r
   r   )r-   ÚmodeÚpypy)é   é   é
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                 C   s   |  S r'   r#   ©r"   r#   r#   r$   Ú<lambda>@   ó    r7   z...c                 C   s   g S r'   r#   r6   r#   r#   r$   r7   B   r8   c                 C   s   t S r'   ©Úfoor6   r#   r#   r$   r7   D   r8   úname 'foo' is not definedc                 C   s   t jS r'   ©r   Úinfr6   r#   r#   r$   r7   F   r8   c                 C   s   t jS r'   ©r   Únanr6   r#   r#   r$   r7   H   r8   c                   C   s   dS ©Nr   r#   r#   r#   r#   r$   r7   J   r8   ú,takes 0 positional arguments but 1 was givenc                 C   s   t jS r'   r<   r6   r#   r#   r$   r7   Q   r8   c                 C   s   t jS r'   r>   r6   r#   r#   r$   r7   S   r8   c                 C   s   g S r'   r#   r6   r#   r#   r$   r7   U   r8   c                 C   s   t S r'   r9   r6   r#   r#   r$   r7   W   r8   c                   C   s   dS r@   r#   r#   r#   r#   r$   r7   Y   r8   c                 C   s   g S r'   r#   r6   r#   r#   r$   r7   `   r8   c                 C   s   t S r'   r9   r6   r#   r#   r$   r7   b   r8   c                 C   s   t jS r'   r<   r6   r#   r#   r$   r7   d   r8   c                 C   s   t jS r'   r>   r6   r#   r#   r$   r7   f   r8   c                   C   s   dS r@   r#   r#   r#   r#   r$   r7   h   r8   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#   )rH   rG   zleft >= right)rG   rG   )r5   r5   zonly non-nan valuesúdomain, err, msgzmethod, kwargsc                 C   sT   t tj|ƒ}tj||d��& |f i |¤d| i¤Ž W d   ƒ n1 sF0    Y  d S )N©ÚmatchÚdomain)Úgetattrr   ÚsamplingÚpytestr   )rL   ÚerrÚmsgÚmethodÚkwargsÚMethodr#   r#   r$   Útest_bad_domain™   s    rU   c           
      C   s  t tj| ƒ}d}|f i |¤d|i¤Ž}|f i |¤d|i¤Ž}t| d¡| d¡ƒ tj d¡ |f i |¤Ž}| d¡}tj d ¡ |f i |¤ddi¤Ž}| d¡}t||ƒ tj tj 	d¡¡}tj 
tj 	d¡¡}	|f i |¤d|i¤Ž}|f i |¤d|	i¤Ž}t| d¡| d¡ƒ d S )Né{   Úrandom_stateéd   )rM   r   rN   r   Úrvsr   ÚrandomÚseedÚRandomStateZMT19937Ú	Generator)
rR   rS   rT   r[   Úrng1Úrng2Úrvs1Úrvs2Zseed1Zseed2r#   r#   r$   Útest_random_state£   s"    


rb   c                  C   sr   t tƒ dd�} t tƒ ƒ}| d¡ t|  d¡| d¡ƒ t tƒ dd�}| d¡}| d¡ | d¡}t||ƒ d S )NrV   ©rW   rX   )r   r   Zset_random_stater   rY   )r^   r_   Úrngr`   ra   r#   r#   r$   Útest_set_random_stateÀ   s    




re   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sŒJ ‚d S )N)Úerr1Úerr2c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z.test_threading_behaviour.<locals>.Distributionc                 S   s
   || _ d S r'   )Úpdf_msg)r!   rh   r#   r#   r$   Ú__init__Ó   s    z7test_threading_behaviour.<locals>.Distribution.__init__c                 S   s&   d|  k rdk r"n n
t | jƒ‚|S )Ng33333óH@g      I@)Ú
ValueErrorrh   r    r#   r#   r$   r%   Ö   s    
z2test_threading_behaviour.<locals>.Distribution.pdfc                 S   s   dS ©NrG   r#   r    r#   r#   r$   r&   Û   s    z3test_threading_behaviour.<locals>.Distribution.dpdfN)r*   r+   r,   ri   r%   r&   r#   r#   r#   r$   ÚDistributionÒ   s   rl   c               
      s\   ˆ dƒ} t | ddd�}z| d¡ W n2 tyV } z|jd ˆd< W Y d }~n
d }~0 0 d S )Nr:   ©r5   rX   é   ©rL   rW   é † r   rf   ©r   rY   rj   Úargs©r-   rd   Úe©rl   Úerrorsr#   r$   Úfunc1Þ   s    ÿz'test_threading_behaviour.<locals>.func1c               
      s\   ˆ dƒ} t | ddd�}z| d¡ W n2 tyV } z|jd ˆd< W Y d }~n
d }~0 0 d S )NÚbarrm   rH   ro   rp   r   rg   rq   rs   ru   r#   r$   Úfunc2ç   s    ÿz'test_threading_behaviour.<locals>.func2)Útargetrf   r:   rg   rx   )Ú	threadingÚThreadÚstartÚjoin)rw   ry   Út1Út2r#   ru   r$   Útest_threading_behaviourÌ   s    
		r�   c                 C   sP   t tj| ƒ}|f i |¤ddi¤Ž}t |¡}t |¡}t| d¡| d¡ƒ d S )NrW   rV   rX   )rM   r   rN   ÚpickleÚdumpsÚloadsr   rY   )rR   rS   rT   r^   Úobjr_   r#   r#   r$   Útest_pickleý   s
    

r†   Úsize)Nr   )r   rG   )r5   r4   )rH   r4   é   é   )r   r   )r   rG   c                 C   sP   t tƒ ƒ}| d u r(t | | ¡¡sLJ ‚n$t | ¡r8| f} | | ¡j| ksLJ ‚d S r'   )r   r   r   ZisscalarrY   Úshape)r‡   rd   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   rc   rG   rX   ©Únumç      $@ç      @)ÚlocÚscaler5   rC   )r   Únormr   rZ   Údefault_rngr
   ÚlinspaceÚcheck_cont_samplesr   ÚppfÚbinomr   ÚsupportÚpmfÚarangeÚcheck_discr_samples)r-   Úurngrd   ÚurL   Úpvr#   r#   r$   Útest_with_scipy_distribution  s    rŸ   çH¯¼šò×z>çš™™™™™¹?c                 C   sn   |   d¡}| ¡ | ¡ f}t |d ¡r8t||||d� |   d¡}t |j¡|_t||jƒj	}|dksjJ ‚d S )Nrp   rG   ©ÚrtolÚatoliô  r¡   )
rY   ÚmeanÚvarr   Úisfiniter   Z	vectorizer(   r   Úpvalue)rd   r-   Úmv_exr£   r¤   rY   Ú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s„J ‚d S )Nrp   r¢   T)Zreturn_countsr¡   )rY   r¥   r¦   r   Úsumr   Z
zeros_likeÚuniquer‡   r   r¨   )rd   rž   r©   r£   r¤   rY   rª   Z	obs_freqsÚ_Zfreqsr«   r#   r#   r$   r›   6  s    

r›   c                  C   s‚   d} t jt| d��  ttƒ ddd� W d   ƒ n1 s80    Y  t jt| d�� ttƒ dd� W d   ƒ n1 st0    Y  d S )Nz.102 : center moved into domain of distributionrJ   r   ©r4   r‰   )ÚcenterrL   ©rL   )rO   ÚwarnsÚRuntimeWarningr	   r   )rQ   r#   r#   r$   Ú!test_warning_center_not_in_domainF  s
    .rµ   rR   )r   r	   r   c                 C   sR   t tj| ƒ}d}tjt|d��  |tƒ ddd� W d   ƒ n1 sD0    Y  d S )Nz17 : mode not in domainrJ   r   r°   )r1   rL   )rM   r   rN   rO   r   r   r   )rR   rT   rQ   r#   r#   r$   Útest_error_mode_not_in_domainP  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��2 ttj|ƒ}|tƒ ƒ}|jdd� W d   ƒ n1 sJ0    Y  ttj|ƒ}|tƒ ƒ}d}t jt|d��& |jdtj 	d¡d� W d   ƒ n1 s¨0    Y  d S )	Nz&`qmc_engine` must be an instance of...rJ   r   )Ú
qmc_engineú6`d` must be consistent with dimension of `qmc_engine`.r4   rH   ©Údr¸   )
rO   r   rj   rM   r   rN   r   ÚqrvsÚqmcÚHalton)r!   rR   rK   rT   Úgenr#   r#   r$   Útest_input_validationa  s    
*
zTestQRVS.test_input_validationNrG   r   ©r[   r4   )rG   ©rG   )rˆ   ©rˆ   )rÃ   rÃ   )©rH   rˆ   rÄ   )r4   ©r4   Úqrngúsize_in, size_outzd_in, d_outc                 C   sJ  t jdkot ¡ d dk}|r0|dkr0t d¡ tƒ }ttj|ƒ}	|	|ƒ}
|d urª|d urª|j	|krªd}tj
t|d��  |
j|||d� W d   ƒ n1 sœ0    Y  d S |d u rÌ|d urÌ|j	d	krÌ|j	f}|| }t|ƒ}|
j|||d
�}|d u�r|j|k�sJ ‚|d u�rF| t |¡�p"d	¡}tj |¡ |¡}t||dd� d S )NÚwin32r   Ú32bitr	   z4NumericalInversePolynomial.qrvs fails for Win 32-bitr¹   rJ   rº   rG   ©r‡   r»   r¸   çê-�™—q=©r¤   )ÚsysÚplatformÚarchitecturerO   Úxfailr   rM   r   rN   r»   r   rj   r¼   r   rŠ   rZ   r   Úprodr’   r–   Úreshaper   )r!   rÆ   Úsize_inÚsize_outZd_inZd_outrR   Zw32r-   rT   r¿   rK   Zshape_expectedÚqrng2r¼   ÚuniformÚqrvs2r#   r#   r$   Útest_QRVS_shape_consistencyw  s,    
.

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 ]4}|
d|f }|d d …|f  |¡}t||dd� qvd S )	N)r4   rˆ   r‰   r   rÁ   rÊ   .rË   rÌ   )r   rM   r   rN   r½   r¾   rZ   r   rÑ   r¼   r’   r–   ÚrangerÒ   r   )r!   rR   r-   rT   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dsrO   Ú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                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z%TestTransformedDensityRejection.dist0c                 C   s   dd||   S ©Nç      è?rG   r#   r    r#   r#   r$   r%   ¾  s    z)TestTransformedDensityRejection.dist0.pdfc                 C   s   dd|  S )Nrã   éþÿÿÿr#   r    r#   r#   r$   r&   Á  s    z*TestTransformedDensityRejection.dist0.dpdfc                 C   s   d||d d  d  S ©Nrã   r4   gUUUUUUå?r#   r    r#   r#   r$   r(   Ä  s    z)TestTransformedDensityRejection.dist0.cdfc                 C   s   dS ©N)éÿÿÿÿrG   r#   ©r!   r#   r#   r$   r˜   Ç  s    z-TestTransformedDensityRejection.dist0.supportN©r*   r+   r,   r%   r&   r(   r˜   r#   r#   r#   r$   Údist0½  s   rê   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z%TestTransformedDensityRejection.dist1c                 C   s   t j |d ¡S ©Nr¡   ©r   r’   Z_pdfr    r#   r#   r$   r%   Ì  s    z)TestTransformedDensityRejection.dist1.pdfc                 C   s   | d t j |d ¡ S )Nç{®Gáz„?r¡   rì   r    r#   r#   r$   r&   Ï  s    z*TestTransformedDensityRejection.dist1.dpdfc                 C   s   t j |d ¡S rë   ©r   r’   Z_cdfr    r#   r#   r$   r(   Ò  s    z)TestTransformedDensityRejection.dist1.cdfNr)   r#   r#   r#   r$   Údist1Ë  s   rï   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z%TestTransformedDensityRejection.dist2c                 C   s
   || _ d S r'   ©Úshift©r!   rñ   r#   r#   r$   ri   Ù  s    z.TestTransformedDensityRejection.dist2.__init__c                 C   s&   || j 8 }dt|ƒd  }d| | S ©Nr   ç      à?©rñ   Úabs©r!   r"   Úyr#   r#   r$   r%   Ü  s    
z)TestTransformedDensityRejection.dist2.pdfc                 C   s8   || j 8 }dt|ƒd  }|| | }|dk r2|S | S )Nr   rB   rõ   r÷   r#   r#   r$   r&   á  s    
z*TestTransformedDensityRejection.dist2.dpdfc                 C   s2   || j 8 }|dkrdd|  S ddd|   S d S ©NrB   rô   r   rð   r    r#   r#   r$   r(   ç  s    
z)TestTransformedDensityRejection.dist2.cdfN)r*   r+   r,   ri   r%   r&   r(   r#   r#   r#   r$   Údist2Ø  s   rú   rB   ç     ˆÃ@çÑ?rí   údist, mv_exc                 C   sL   t ƒ �&}| t¡ t|dd�}W d   ƒ n1 s20    Y  t|||ƒ d S ©Né*   rc   )r   Úfilterr´   r   r•   )r!   r-   r©   Úsuprd   r#   r#   r$   Ú
test_basic÷  s    
*z*TestTransformedDensityRejection.test_basicc                 C   s   dS )Nr   r#   r6   r#   r#   r$   r7     r8   z(TestTransformedDensityRejection.<lambda>ú50 : bad construction points.úpdf, err, msgc                 C   sX   G dd„ dƒ}||_ dd„ |_tj||d�� t|ƒ W d   ƒ n1 sJ0    Y  d S )Nc                   @   s   e Zd ZdS )z:TestTransformedDensityRejection.test_bad_pdf.<locals>.distN©r*   r+   r,   r#   r#   r#   r$   r-     s   r-   c                 S   s   dS rk   r#   r6   r#   r#   r$   r7   	  r8   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>rJ   ©r%   r&   rO   r   r   ©r!   r%   rP   rQ   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   ƒ n1 sN0    Y  d S )Nc                   @   s   e Zd ZdS )z;TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNr  r#   r#   r#   r$   r-     s   r-   c                 S   s   | S r'   r#   r6   r#   r#   r$   r7     r8   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>rJ   ©rG   r5   r²   r  )r!   r&   rP   rQ   r-   r#   r#   r$   Útest_bad_dpdf  s
    
z-TestTransformedDensityRejection.test_bad_dpdfrI   c                 C   s@   t j||d�� ttƒ |d� W d   ƒ n1 s20    Y  d S ©NrJ   r²   )rO   r   r   r   ©r!   rL   rP   rQ   r#   r#   r$   Útest_inf_nan_domains  s    z4TestTransformedDensityRejection.test_inf_nan_domainsÚconstruction_points)rç   r   r¡   c                 C   s@   t jtdd�� ttƒ |d� W d   ƒ n1 s20    Y  d S )Nz1`construction_points` must be a positive integer.rJ   ©r  ©rO   r   rj   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 s60    Y  g d¢}t jtdd�� ttƒ |d� W d   ƒ n1 sz0    Y  tjtjtjg}t jt	dd�� ttƒ |d� W d   ƒ n1 sÆ0    Y  ddg}t jtd	d��  ttƒ d
|d� W d   ƒ n1 �s0    Y  d S )NzC`construction_points` must either be a scalar or a non-empty array.rJ   r  )rG   rG   rG   rG   rG   rG   z:33 : starting points not strictly monotonically increasingr  éöÿÿÿr5   z!50 : starting point out of domain)éýÿÿÿr4   )rL   r  )
rO   r   rj   r   r   r³   r´   r   r?   r   r  r#   r#   r$   Ú"test_bad_construction_points_array%  s*    ÿ$ÿ$ÿ$þzBTestTransformedDensityRejection.test_bad_construction_points_arrayÚcç      ð¿r¡   r   c                 C   sD   d}t jt|d�� ttƒ dd� W d   ƒ n1 s60    Y  d S )Nz`c` must either be -0.5 or 0.rJ   r  )r  r  )r!   r  rQ   r#   r#   r$   Ú
test_bad_cI  s    z*TestTransformedDensityRejection.test_bad_cr   rG   éè  rŒ   rô   rC   rD   ©rä   r4   rˆ   r�   c                 C   sž   t tƒ dd�}tƒ �V}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 sp0    Y  t	||ddd	� |j
|j
ksšJ ‚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�   rd   r  ÚresÚexpectedr#   r#   r$   Útest_ppf_hatS  s    ÿ
*z,TestTransformedDensityRejection.test_ppf_hatc                 C   s”   G dd„ dƒ}d}t jt|d�� t|ƒ W d   ƒ n1 s>0    Y  G dd„ dƒ}d}t jt|d�� t|ƒ W d   ƒ n1 s†0    Y  d S )Nc                   @   s   e Zd ZdS )ú;TestTransformedDensityRejection.test_bad_dist.<locals>.distNr  r#   r#   r#   r$   r-   i  s   r-   z`pdf` required but not found.rJ   c                   @   s   e Zd Zdd„ ZdS )r#  c                 S   s   d| |   S rk   r#   r6   r#   r#   r$   r7   r  r8   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>N©r*   r+   r,   r%   r#   r#   r#   r$   r-   q  s   z`dpdf` required but not found.)rO   r   rj   r   )r!   r-   rQ   r#   r#   r$   Útest_bad_distg  s    &z-TestTransformedDensityRejection.test_bad_distN)#r*   r+   r,   rê   rï   rú   ÚdistsÚmv0Úmv1r   r=   Úmv2Úmv3ÚmvsrO   rß   rà   Úzipr  r   Zbad_pdfsÚbad_pdfs_commonr  Úbad_dpdf_commonr
  Úinf_nan_domainsr  r  r  r?   r  r”   r�   r"  r%  r#   r#   r#   r$   rá   »  sB   

ÿ





$
þ
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>   Únchypergeom_walleniusÚrandintÚnchypergeom_fisherúdistname, paramsc           
      C   sª   || j v rd}t |¡ t|tƒs(|}n
tt|ƒ}||Ž }| ¡ }t 	|d |d  ¡sbt 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.rG   r   z$DAU only works with a finite domain.rª   rÿ   rc   )Úbasic_fail_distsrO   ÚskipÚ
isinstanceÚstrrM   r   r˜   r   r§   rš   r™   r   r›   ©
r!   ÚdistnameÚparamsrQ   r-   rL   Úkrž   r©   rd   r#   r#   r$   r  ‚  s    






zTestDiscreteAliasUrn.test_basicc                 C   s   t jS r'   r<   r6   r#   r#   r$   r7   œ  r8   zTestDiscreteAliasUrn.<lambda>rE   c                 C   s   t jS r'   r>   r6   r#   r#   r$   r7   Ÿ  r8   c                 C   s   dS )NrB   r#   r6   r#   r#   r$   r7   ¢  r8   rF   c                 C   s   t S r'   r9   r6   r#   r#   r$   r7   ¥  r8   r;   c                 C   s   g S r'   r#   r6   r#   r#   r$   r7   ¨  r8   z)setting an array element with a sequence.c                 C   s   |  S r'   r#   r6   r#   r#   r$   r7   «  r8   z50 : probability < 0c                   C   s   dS r@   r#   r#   r#   r#   r$   r7   ®  r8   rA   zpmf, err, msgc                 C   sR   G dd„ dƒ}||_ tj||d�� t|dd� W d   ƒ n1 sD0    Y  d S )Nc                   @   s   e Zd ZdS )z/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNr  r#   r#   r#   r$   r-   ´  s   r-   rJ   r	  r²   )r™   rO   r   r   )r!   r™   rP   rQ   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dtyperV   rc   rp   r   )ÚweightsrH   )
r   ZasarrayZfloat64r   rY   r­   rš   ÚlenZaverager›   )r!   rž   rd   ZvariatesZ
m_expectedZ
v_expectedZmv_expectedr#   r#   r$   Útest_sampling_with_pvº  s    
z*TestDiscreteAliasUrn.test_sampling_with_pvúpv, msgc                 C   s:   t jt|d�� t|ƒ W d   ƒ n1 s,0    Y  d S ©NrJ   ©rO   r   rj   r   ©r!   rž   rQ   r#   r#   r$   Útest_bad_pvÈ  s    z TestDiscreteAliasUrn.test_bad_pvr   rL   c                 C   sF   t jtdd��$ tt dd¡|d� W d   ƒ n1 s80    Y  d S ©Nzmust be finiterJ   r5   rC   r²   )rO   r   rj   r   r   r—   ©r!   rL   r#   r#   r$   Útest_inf_domainÒ  s    z$TestDiscreteAliasUrn.test_inf_domainc                 C   sB   t jtdd��  tddgdd� W d   ƒ n1 s40    Y  d S )Nzrelative urn size < 1.rJ   rô   rç   )Z
urn_factor)rO   r³   r´   r   rè   r#   r#   r$   Útest_bad_urn_factor×  s    z(TestDiscreteAliasUrn.test_bad_urn_factorc                 C   sL   d}G dd„ dƒ}t jt|d�� t|ƒ W d   ƒ n1 s>0    Y  d S )NzG`domain` must be provided when the probability vector is not available.c                   @   s   e Zd Zdd„ ZdS )z0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                 S   s   |S r'   r#   r    r#   r#   r$   r™   à  s    z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmfN)r*   r+   r,   r™   r#   r#   r#   r$   r-   ß  s   r-   rJ   rD  )r!   rQ   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ÿ   rc   )g     ð‡@g    
àAg{®Gázt?)r£   )r   Zsoftmaxr   Zonesr   r›   )r!   rž   rd   r#   r#   r$   Útest_gh19359æ  s
    ÿz!TestDiscreteAliasUrn.test_gh19359N)r*   r+   r,   r5  rO   rß   rà   r   r  rj   Ú	NameErrorr   Ú	TypeErrorZbad_pmfr=  rA  Úbad_pv_commonrF  r   r=   Ú
inf_domainrI  rJ  rK  rL  r#   r#   r#   r$   r0  y  sR   
ÿÿÿÿÿÿÿì
ÿ

$ÿ
r0  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                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z$TestNumericalInversePolynomial.dist0c                 C   s   dd||   S râ   r#   r    r#   r#   r$   r%   ñ  s    z(TestNumericalInversePolynomial.dist0.pdfc                 C   s   d||d d  d  S rå   r#   r    r#   r#   r$   r(   ô  s    z(TestNumericalInversePolynomial.dist0.cdfc                 C   s   dS ræ   r#   rè   r#   r#   r$   r˜   ÷  s    z,TestNumericalInversePolynomial.dist0.supportN©r*   r+   r,   r%   r(   r˜   r#   r#   r#   r$   rê   ð  s   rê   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z$TestNumericalInversePolynomial.dist1c                 C   s   t j |d ¡S rë   rì   r    r#   r#   r$   r%   ü  s    z(TestNumericalInversePolynomial.dist1.pdfc                 C   s   t j |d ¡S rë   rî   r    r#   r#   r$   r(   ÿ  s    z(TestNumericalInversePolynomial.dist1.cdfN)r*   r+   r,   r%   r(   r#   r#   r#   r$   rï   û  s   rï   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z$TestNumericalInversePolynomial.dist2c                 C   s    dddt  dt j | ¡   S )Nçš™™™™™©?çÍÌÌÌÌÌÜ?rG   rH   ©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 )NrS  rG   gÍÌÌÌÌÌì?r   r   r>  ©r   r   Úcosr    r#   r#   r$   r(     s
    
,ÿÿz(TestNumericalInversePolynomial.dist2.cdfc                 C   s   dS ræ   r#   rè   r#   r#   r$   r˜     s    z,TestNumericalInversePolynomial.dist2.supportNrR  r#   r#   r#   r$   rú     s   rú   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z$TestNumericalInversePolynomial.dist3c                 C   s$   ddddt  dt j | ¡    S )NrC   rS  rT  rG   rH   rU  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=
·?rH   r5   rW  r    r#   r#   r$   r(     s    $ÿz(TestNumericalInversePolynomial.dist3.cdfc                 C   s   dS )N)éûÿÿÿr‰   r#   rè   r#   r#   r$   r˜      s    z,TestNumericalInversePolynomial.dist3.supportNrR  r#   r#   r#   r$   Údist3  s   rZ  rB   rü   rí   gÍÌÌÌÌÌÜ¿çUUUUUUÕ?gìQ¸…ëÉ?rH   g«ªªªªª @rý   c                 C   s   t |dd�}t|||ƒ d S rþ   )r	   r•   ©r!   r-   r©   rd   r#   r#   r$   r  ,  s    z)TestNumericalInversePolynomial.test_basicr4  c           	      C   sÊ   g d¢}g d¢}dg}||v r.t  d|› �¡ ||v rFt  d|› �¡ t|tƒrZtt|ƒn|}||Ž }tƒ �&}| t¡ t	|dd�}W d   ƒ n1 s˜0    Y  ||v r®d 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ÿ   rc   )rO   r6  r7  r8  rM   r   r   r   r´   r	   r•   r¥   r¦   )	r!   r:  r;  Zvery_slow_distsÚ
fail_distsZskip_sample_moment_checkr-   r  rd   r#   r#   r$   Útest_basic_all_scipy_dists2  s$    ÿþ
*z9TestNumericalInversePolynomial.test_basic_all_scipy_distsr  c                 C   sV   G dd„ dƒ}||_ tj||d��  t|ddgd� W d   ƒ n1 sH0    Y  d S )Nc                   @   s   e Zd ZdS )z9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNr  r#   r#   r#   r$   r-   V  s   r-   rJ   r   r‰   r²   )r%   rO   r   r	   r  r#   r#   r$   r  T  s    z+TestNumericalInversePolynomial.test_bad_pdfzlogpdf, err, msgc                 C   sV   G dd„ dƒ}||_ tj||d��  t|ddgd� W d   ƒ n1 sH0    Y  d S )Nc                   @   s   e Zd ZdS )z<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNr  r#   r#   r#   r$   r-   ^  s   r-   rJ   r   r‰   r²   )ÚlogpdfrO   r   r	   )r!   rh  rP   rQ   r-   r#   r#   r$   Útest_bad_logpdf\  s    z.TestNumericalInversePolynomial.test_bad_logpdfrI   c                 C   s@   t j||d�� ttƒ |d� W d   ƒ n1 s20    Y  d S r  )rO   r   r	   r   r  r#   r#   r$   r  f  s    z3TestNumericalInversePolynomial.test_inf_nan_domainsr   rG   é'  rŒ   rô   r¡   rC   rD   r  r�   c                 C   s¢   t ƒ }t|dd�}tƒ �V}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 st0    Y  t||ddd� |j	|j	ksžJ ‚d S ©	Nç›+¡†›„=©Úu_resolutionr  r  r  r  g•dyáý¥=r¢   )
r   r	   r   r   r´   r–   r   r’   r   rŠ   ©r!   r�   r-   rd   r  r   r!  r#   r#   r$   Útest_ppfz  s    
*z'TestNumericalInversePolynomial.test_ppfr  r5   r4   rˆ   r"   c                 C   s¢   t ƒ }t|dd�}tƒ �V}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 st0    Y  t||ddd� |j	|j	ksžJ ‚d S rk  )
r   r	   r   r   r´   r(   r   r’   r   rŠ   )r!   r"   r-   rd   r  r   r!  r#   r#   r$   Útest_cdf�  s    
*z'TestNumericalInversePolynomial.test_cdfc                 C   sj   t ƒ }t|dd�}| ¡ \}}|dk s*J ‚||ks6J ‚t|dd�}| ¡ \}}|dk sZJ ‚||ksfJ ‚d S ©Ng»½×Ùß|Û=rm  rl  )r   r	   Úu_error)r!   r-   rd   Ú	max_errorÚmaer#   r#   r$   Útest_u_error¢  s    z+TestNumericalInversePolynomial.test_u_errorg      @é   g#B’¡œÇ;Úorderc                 C   sH   t ƒ }d}tjt|d�� t||d� W d   ƒ n1 s:0    Y  d S )Nz2`order` must be an integer in the range \[3, 17\].rJ   ©rx  )r   rO   r   rj   r	   )r!   rx  r-   rQ   r#   r#   r$   Útest_bad_orders°  s    z.TestNumericalInversePolynomial.test_bad_ordersrn  c                 C   sD   d}t jt|d�� ttƒ |d� W d   ƒ n1 s60    Y  d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rJ   rm  )rO   r   rj   r	   r   )r!   rn  rQ   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 sD0    Y  tƒ }t|ƒ}d}t jt|d�� | d¡ W d   ƒ n1 sŽ0    Y  G dd„ dƒ}|ƒ }t|ƒ}d	}t jt|d�� | ¡  W d   ƒ n1 sä0    Y  d S )
Nc                   @   s   e Zd Zdd„ ZdS )z=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 S   s   t j |¡S r'   rî   r    r#   r#   r$   r(   Â  s    zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdfN)r*   r+   r,   r(   r#   r#   r#   r$   ÚBadDistÁ  s   r|  z9Either of the methods `pdf` or `logpdf` must be specifiedrJ   z4`sample_size` must be greater than or equal to 1000.r5   c                   @   s   e Zd Zdd„ ZdS )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$   rl   Ð  s   rl   z!Exact CDF required but not found.)rO   r   rj   r	   r   rs  )r!   r|  r-   rQ   rd   rl   r#   r#   r$   rK  ¿  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                   @   s   e Zd ZdS )zJTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNr  r#   r#   r#   r$   ÚMyDistÞ  s   r~  c                 S   s   t  |  |  d ¡S ©NrH   )Úmathr   r6   r#   r#   r$   r7   ã  r8   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>c                 S   s   |  |  d S r  r#   r6   r#   r#   r$   r7   è  r8   r  gwJëÿï?rX   rŒ   )r%   r	   rh  r   r”   r   r–   )r!   r~  Zdist_pdfr^   Zdist_logpdfr_   Úqr#   r#   r$   Útest_logpdf_pdf_consistencyÚ  s    

z:TestNumericalInversePolynomial.test_logpdf_pdf_consistencyN)+r*   r+   r,   rê   rï   rú   rZ  r&  r'  r(  r   r   r)  r*  r+  rO   rß   rà   r,  r  Úxslowr   rg  r-  r  Úbad_logpdfs_commonri  r/  r  r”   r?   r=   r�   rp  r"   rq  rv  Z
bad_ordersZbad_u_resolutionrz  r{  rK  r‚  r#   r#   r#   r$   rQ  î  s\   ÿ
 

	
ô
"þ


rQ  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                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z!TestNumericalInverseHermite.dist0c                 C   s   ddt  dt j | ¡  S )Nrô   r   r   rU  r    r#   r#   r$   r%   õ  s    z%TestNumericalInverseHermite.dist0.pdfc                 C   s   t jt  dt j | ¡ S )Nr   rW  r    r#   r#   r$   r&   ø  s    z&TestNumericalInverseHermite.dist0.dpdfc                 C   s4   ddt j d|   t  dt j | ¡ dt j  S )Nr   r   rG   r>  rW  r    r#   r#   r$   r(   û  s    z%TestNumericalInverseHermite.dist0.cdfc                 C   s   dS ræ   r#   rè   r#   r#   r$   r˜   þ  s    z)TestNumericalInverseHermite.dist0.supportNré   r#   r#   r#   r$   rê   ô  s   rê   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z!TestNumericalInverseHermite.dist1c                 C   s\   |dkr&t  dt j | ¡d t j S |dk r2dS |dkrXt  dt j | ¡d t j S d S )Nr   r   rô   rB   rU  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 r4dS |dkr\t  dt j | ¡t j t j S d S )Nr   r   rB   rô   ©r   rX  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 r0dS |dkrTddt  dt j | ¡  S d S )Nr   ç      Ð?rG   r   rB   rô   rã   r†  r    r#   r#   r$   r(     s    z%TestNumericalInverseHermite.dist1.cdfc                 C   s   dS )N)rç   rô   r#   rè   r#   r#   r$   r˜     s    z)TestNumericalInverseHermite.dist1.supportNré   r#   r#   r#   r$   rï     s   rï   rç   rH   r[  rG   rˆ   g      Ð¿g      Ø?g      °?rý   rx  r4   r‰   c                 C   s   t ||dd�}t|||ƒ d S )Nrÿ   )rx  rW   )r
   r•   )r!   r-   r©   rx  rd   r#   r#   r$   r  (  s    z&TestNumericalInverseHermite.test_basicrI   c                 C   s@   t j||d�� ttƒ |d� W d   ƒ n1 s20    Y  d S r  )rO   r   r
   r   r  r#   r#   r$   r  1  s    z0TestNumericalInverseHermite.test_inf_nan_domainsc           
   	   C   sÎ   h d£}h d£}||v r"t  d¡ ||v r4t  d¡ tj d¡ tt|ƒ|Ž }t|ƒ}tj 	d¡}t 
t | |¡| |¡ ¡t | |¡¡ ¡}t 
t | | |¡¡| ¡¡}	|dk s¾J ‚|	dk sÊJ ‚d S )	N>   r_  ra  Zskewnormr`  >   Znorminvgaussr]  ZgenhyperbolicZnctZinvgaussZgeninvgaussrd  r^  ÚbetaZwaldrb  rc  zDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r5   ç:Œ0âŽyE>rË   )rO   r6  rÐ   r   rZ   r[   rM   r   r
   ZrandÚmaxrö   r–   r(   )
r!   r:  ÚshapesZ
slow_distsrf  r-   Úfnir"   Zp_tolZu_tolr#   r#   r$   Úbasic_test_all_scipy_dists6  s    

0 z6TestNumericalInverseHermite.basic_test_all_scipy_distszignore::RuntimeWarning)r:  r‹  c                 C   s   |   ||¡ d S r'   ©r�  )r!   r:  r‹  r#   r#   r$   rg  O  s    z6TestNumericalInverseHermite.test_basic_all_scipy_distsc                 C   s   |   dd¡ d S )NZ	truncnorm)r¡   rH   rŽ  rè   r#   r#   r$   Útest_basic_truncnorm_gh17155W  s    z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155c                 C   s¾   d}t jt|d�� ttƒ dd� W d   ƒ n1 s60    Y  d}t jt|d�� tdƒ W d   ƒ n1 sp0    Y  d}t jt|d�� ttƒ dd	� W d   ƒ n1 s°0    Y  d S )
Nz"`order` must be either 1, 3, or 5.rJ   rH   ry  z`cdf` required but not foundr’   z!could not convert string to floatZekkirm  )rO   r   rj   r
   r   )r!   rK   r#   r#   r$   rÀ   [  s    ,&ÿz1TestNumericalInverseHermite.test_input_validationNr   )é   )r�  )©rˆ   r‰   é   r‘  rd   rÇ   c           
      C   sp   t ƒ }t|ƒ}t|ƒ}|j||d�}|d ur:|j|ks:J ‚|d urlt|ƒ}|j|d�}tj 	|¡}	t
||	ƒ d S )N)r‡   rW   ©r‡   )r   r
   r   rY   rŠ   r   rÖ   r   r’   r–   r   )
r!   rd   rÓ   rÔ   r-   rŒ  r_   rY   rÖ   ra   r#   r#   r$   Útest_RVSm  s    z$TestNumericalInverseHermite.test_RVSc                 C   sZ   d}d}t jt|d�� ttj|Ž ƒ W d   ƒ n1 s:0    Y  ttj|Ž dd� d S )N)g�µds’z@g@ø¯eä?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrJ   r‰  rm  )rO   r³   r´   r
   r   rˆ  )r!   r‹  rK   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   rc   )r   r
   r   r’   r   rY   )r!   rï   Zfni1rú   Zfni2r#   r#   r$   Útest_custom_distributionŒ  s
    z4TestNumericalInverseHermite.test_custom_distributionrB   r   rj  rŒ   rô   r¡   rC   rD   r  r�   c                 C   s¢   t ƒ }t|dd�}tƒ �V}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 st0    Y  t||ddd	� |j	|j	ksžJ ‚d S )
NrË   rm  r  r  r  r  g•Ö&è.>gLÎaã§�ô=r¢   )
r   r
   r   r   r´   r–   r   r’   r   rŠ   ro  r#   r#   r$   rp  ¤  s    
*z$TestNumericalInverseHermite.test_ppfc                 C   sš   t ƒ }t|dd�}| ¡ \}}|dk s*J ‚||ks6J ‚tƒ �&}| t¡ t|dd�}W d   ƒ n1 sh0    Y  | ¡ \}}|dk sŠJ ‚||ks–J ‚d S rr  )r   r
   rs  r   r   r´   )r!   r-   rd   rt  ru  r  r#   r#   r$   rv  ¶  s    
*z(TestNumericalInverseHermite.test_u_error))r*   r+   r,   rê   rï   r&  r   r   r'  r(  r+  rO   rß   rà   r,  r  r/  r  r�  Úfilterwarningsrƒ  r   rg  r�  rÀ   rZ   r\   ZrngsÚappendr“   rÝ   rÞ   r”  r•  r–  r”   r?   r=   r�   rp  rv  r#   r#   r#   r$   r…  ï  sL   & ÿ



ô
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>   r1  r2  r3  c                 C   sN   g d¢}t j ¡ }t t¡� t||dd� W d   ƒ n1 s@0    Y  d S )N©r¡   g333333Ó?g333333ã?r3   ©rW   Zguide_factor©r   rZ   r“   rO   r³   r´   r   ©r!   rž   rœ   r#   r#   r$   Ú$test_guide_factor_gt3_raises_warningÌ  s    
z;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warningc                 C   sN   g d¢}t j ¡ }t t¡� t||dd� W d   ƒ n1 s@0    Y  d S )Nrš  r   r›  rœ  r�  r#   r#   r$   Ú%test_guide_factor_zero_raises_warningÒ  s    
z<TestDiscreteGuideTable.test_guide_factor_zero_raises_warningc                 C   sN   g d¢}t j ¡ }t t¡� t||dd� W d   ƒ n1 s@0    Y  d S )Nrš  rç   r›  rœ  r�  r#   r#   r$   Ú)test_negative_guide_factor_raises_warningØ  s    
z@TestDiscreteGuideTable.test_negative_guide_factor_raises_warningr4  c           
      C   sª   || j v rd}t |¡ t|tƒs(|}n
tt|ƒ}||Ž }| ¡ }t 	|d |d  ¡sbt d¡ t 
|d |d d ¡}| |¡}| d¡}t|dd�}	t|	||ƒ d S )NzYDGT fails on these probably because of large domains and small computation errors in PMF.rG   r   z$DGT only works with a finite domain.rª   rÿ   rc   )r5  rO   r6  r7  r8  rM   r   r˜   r   r§   rš   r™   r   r›   r9  r#   r#   r$   r  á  s    






z!TestDiscreteGuideTable.test_basicr   rG   rj  rŒ   rô   r¡   rC   rD   r  r�   c           	      C   s¬   d\}}t  ||¡}t|dd�}tƒ �Z}| td¡ | td¡ | td¡ | td¡ | |¡}t j |||¡}W d   ƒ n1 s†0    Y  t|j|jƒ t||ƒ d S )N)rˆ   r¡   rÿ   rc   r  r  r  r  )	r   r—   r   r   r   r´   r–   r   rŠ   )	r!   r�   ÚnÚpr-   rd   r  r   r!  r#   r#   r$   rp  	  s    
.zTestDiscreteGuideTable.test_ppfrB  c                 C   s:   t jt|d�� t|ƒ W d   ƒ n1 s,0    Y  d S rC  )rO   r   rj   r   rE  r#   r#   r$   rF    s    z"TestDiscreteGuideTable.test_bad_pvrL   c                 C   sF   t jtdd��$ tt dd¡|d� W d   ƒ n1 s80    Y  d S rG  )rO   r   rj   r   r   r—   rH  r#   r#   r$   rI  (  s    z&TestDiscreteGuideTable.test_inf_domainN)r*   r+   r,   r5  rž  rŸ  r   rO   rß   rà   r   r  r   r”   r?   r=   r�   rp  rO  rF  rP  rI  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                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zTestSimpleRatioUniforms.distc                 C   s   || _ || _d S r'   )rñ   r1   rò   r#   r#   r$   ri   3  s    z%TestSimpleRatioUniforms.dist.__init__c                 C   s&   || j 8 }dt|ƒd  }d| | S ró   rõ   r÷   r#   r#   r$   r%   7  s    
z TestSimpleRatioUniforms.dist.pdfc                 C   s2   || j 8 }|dkrdd|  S ddd|   S d S rù   rð   r    r#   r#   r$   r(   <  s    
z TestSimpleRatioUniforms.dist.cdfN)r*   r+   r,   ri   r%   r(   r#   r#   r#   r$   r-   2  s   r-   rB   rû   rý   c                 C   sF   t ||jdd�}t|||ƒ t ||j| |j¡dd�}t|||ƒ d S )Nrÿ   )r1   rW   )r1   Zcdf_at_moderW   )r   r1   r•   r(   r\  r#   r#   r$   r  J  s    
þz"TestSimpleRatioUniforms.test_basicrI   c                 C   s@   t j||d�� ttƒ |d� W d   ƒ n1 s20    Y  d S r  )rO   r   r   r   r  r#   r#   r$   r  V  s    z,TestSimpleRatioUniforms.test_inf_nan_domainsc                 C   sB   t jtdd��  ttƒ ddd� W d   ƒ n1 s40    Y  d S )Nz`pdf_area` must be > 0rJ   r   rç   )r1   Zpdf_area)rO   r   rj   r   r   rè   r#   r#   r$   rK  [  s    z%TestSimpleRatioUniforms.test_bad_argsN)r*   r+   r,   r-   r&  r   r=   r(  r)  r+  rO   rß   rà   r,  r  r/  r  rK  r#   r#   r#   r$   r£  .  s   

ÿ


r£  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestRatioUniformsz# Tests for rvs_ratio_uniforms.
    c                 C   s¬   t jj}t |t d¡ƒ¡t d¡ }t |dƒ¡}t||| |dd�}tt  | d¡d¡d dkd	ƒ td
d„ dddt 	d¡ dd�}tt  | d¡d¡d dkd	ƒ d S )NrH   r   i90  ©ÚumaxÚvminÚvmaxrW   iÄ	  r’   rG   r‡  Tc                 S   s   t  |  ¡S r'   r}  r6   r#   r#   r$   r7   o  r8   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>rç   r  Zexpon)
r   r’   r%   r   r   r   r   ZkstestrY   r   )r!   ÚfÚvr�   r¿   r#   r#   r$   Útest_rv_generatione  s     
ÿz$TestRatioUniforms.test_rv_generationc                 C   s’  t jj}t |t d¡ƒ¡t d¡ }t |dƒ¡}t||| |dd�}t||| |dd�}t||| |dd�}| d¡| d¡| d¡  }}}	t||ƒ t||	 ¡ ƒ t|j	dƒ t|	j	dƒ t||| |dd�}
t||| |dd�}|
jd	d
�|jdd
� }}t| ¡ |ƒ t|j	d	ƒ t||| |dd�}t||| |dd�}t||| |dd�}| ¡ | d¡| d¡  }}}t||ƒ t||ƒ d S )NrH   r   éÒ  r¥  r4   rÅ   )r4   rG   rn   )r4   r4   r4   r“  é   rG   rÂ   )
r   r’   r%   r   r   r   rY   r   ÚflattenrŠ   )r!   r©  rª  r�   Úgen1Úgen2Zgen3Úr1Úr2Zr3Zgen4Zgen5Zr4Zr5Zgen6Zgen7Zgen8Zr6Zr7Úr8r#   r#   r$   Ú
test_shapes  s,    "
 
zTestRatioUniforms.test_shapec                 C   sˆ   t jj}t |t d¡ƒ¡t d¡ }t |dƒ¡}t||| |dd�}| d¡}tj d¡ t||| |d�}| d¡}t	||ƒ d S )NrH   r   r¬  r¥  r5   )r¦  r§  r¨  )
r   r’   r%   r   r   r   rY   rZ   r[   r   )r!   r©  rª  r¦  r¯  r±  r°  r²  r#   r#   r$   rb   �  s    

z#TestRatioUniforms.test_random_statec                 C   sü   t jj}ttdd��  t|dddd� W d   ƒ n1 s:0    Y  ttdd��  t|dddd� W d   ƒ n1 sv0    Y  ttdd��  t|dddd� W d   ƒ n1 s²0    Y  ttdd��  t|dddd� W d   ƒ n1 sî0    Y  d S )	Nzvmin must be smaller than vmaxrJ   rG   r4   )r%   r¦  r§  r¨  zumax must be positiverç   r   )r   r’   r%   Úassert_raisesrj   r   )r!   r©  r#   r#   r$   Útest_exceptionsš  s    ...z!TestRatioUniforms.test_exceptionsN)r*   r+   r,   Ú__doc__r«  r´  rb   r¶  r#   r#   r#   r$   r¤  a  s
   r¤  )r    r¡   )r¬   r¡   )Lr{   r‚   rO   Úcopyr   rÎ   rÍ   r€  Únumpyr   Znumpy.testingr   r   r   Zscipy.stats.samplingr   r   r   r	   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floaterrrN  rM  r-  r.  r„  r?   r=   rO  rj   Zbad_sized_domainsZbad_domainsr/  Znan_domainsrß   rà   rU   rb   re   r�   r†   r‹   rŸ   r•   r›   rµ   r¶   r·   rá   r0  rQ  r…  r™  r£  r¤  r#   r#   r#   r$   Ú<module>   sÒ   (
ú	
ÿôöö
ûü	þøþÿÿ
1






ÿ[ ?u   Wi3