U
    »mœdEÆ  ã                   @   sR  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 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dddgifdddddg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 d0fd1d2ggd3fd4d5e	j.dgd6fd4d5e	j/dgd6fd2d2gd7fgZ0d8e1d9fd:e1d9fgZ2d;ed<fd=ed<fgZ3d>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e1d?fe	j.e	j/fe1d?fgZ4d e	j.fe1d?fe	j.e	j.fe1d?fgZ5ej6 7d@e3e2 e5 ¡ej6 7dAe$¡dBdC„ ƒƒZ8ej6 7dAe$¡dDdE„ ƒZ9dFdG„ Z:dHdI„ Z;ej6 7dAe$¡dJdK„ ƒZ<ej6 7dLdd dMdNdOdPdQdRg¡dSdT„ ƒZ=dUdV„ Z>dWdX„ Z?dYdZ„ Z@d[d\„ ZAej6 7d]dddg¡d^d_„ ƒZBej6 7d]ddg¡G d`da„ daƒƒZCG dbdc„ dcƒZDG ddde„ deƒZEG dfdg„ dgƒZFG dhdi„ diƒZGG djdk„ dkƒZHG dldm„ dmƒZIdS )né    N)Údeepcopy)Úassert_allcloseÚassert_equalÚsuppress_warnings)ÚNumpyVersion)ÚTransformedDensityRejectionÚDiscreteAliasUrnÚDiscreteGuideTableÚNumericalInversePolynomialÚNumericalInverseHermiteÚSimpleRatioUniformsÚUNURANError)Ú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"   úX/home/sam/Atlas/atlas_env/lib/python3.8/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>?   ó    r6   z...c                 C   s   g S r&   r"   r5   r"   r"   r#   r6   A   r7   c                 C   s   t S r&   ©Úfoor5   r"   r"   r#   r6   C   r7   úname 'foo' is not definedc                 C   s   t jS r&   ©r   Úinfr5   r"   r"   r#   r6   E   r7   c                 C   s   t jS r&   ©r   Únanr5   r"   r"   r#   r6   G   r7   c                   C   s   dS ©Nr   r"   r"   r"   r"   r#   r6   I   r7   ú,takes 0 positional arguments but 1 was givenc                 C   s   t jS r&   r;   r5   r"   r"   r#   r6   P   r7   c                 C   s   t jS r&   r=   r5   r"   r"   r#   r6   R   r7   c                 C   s   g S r&   r"   r5   r"   r"   r#   r6   T   r7   c                 C   s   t S r&   r8   r5   r"   r"   r#   r6   V   r7   c                   C   s   dS r?   r"   r"   r"   r"   r#   r6   X   r7   c                 C   s   g S r&   r"   r5   r"   r"   r#   r6   _   r7   c                 C   s   t S r&   r8   r5   r"   r"   r#   r6   a   r7   c                 C   s   t jS r&   r;   r5   r"   r"   r#   r6   c   r7   c                 C   s   t jS r&   r=   r5   r"   r"   r#   r6   e   r7   c                   C   s   dS r?   r"   r"   r"   r"   r#   r6   g   r7   z!must contain at least one elementr   ç        z0wrong number of dimensions \(expected 1, got 2\)çš™™™™™É?çš™™™™™Ù?ú)must contain only finite / non-nan valuesú(must contain at least one non-zero value)é   é   r3   zmust be a length 2 tupler"   )rG   rF   zleft >= right)rF   rF   )r4   r4   zonly non-nan valuesúdomain, err, msgzmethod, kwargsc              	   C   s<   t tj|ƒ}tj||d�� |f |d| i—Ž W 5 Q R X d S )N©ÚmatchÚdomain)Úgetattrr   ÚsamplingÚpytestÚraises)rK   ÚerrÚmsgÚmethodÚkwargsÚMethodr"   r"   r#   Útest_bad_domain˜   s    rU   c           
      C   s  t tj| ƒ}d}|f |d|i—Ž}|f |d|i—Ž}t| d¡| d¡ƒ tj d¡ |f |Ž}| d¡}tj d ¡ |f |ddi—Ž}| d¡}t||ƒ tj tj 	d¡¡}tj 
tj 	d¡¡}	|f |d|i—Ž}|f |d|	i—Ž}t| d¡| d¡ƒ d S )Né{   Úrandom_stateéd   )rL   r   rM   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|t‚ˆd dksŒt‚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 ©NrF   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               
      sZ   ˆ dƒ} t | ddd�}z| d¡ W n0 tk
rT } z|jd ˆd< W 5 d }~X Y nX d S )Nr9   ©r4   rX   é   ©rK   rW   é † r   rf   ©r   rY   rj   Úargs©r,   rd   Úe©rl   Úerrorsr"   r#   Úfunc1Ý   s    ÿz'test_threading_behaviour.<locals>.func1c               
      sZ   ˆ dƒ} t | ddd�}z| d¡ W n0 tk
rT } z|jd ˆd< W 5 d }~X Y nX d S )NÚbarrm   rG   ro   rp   r   rg   rq   rs   ru   r"   r#   Úfunc2æ   s    ÿz'test_threading_behaviour.<locals>.func2)Útargetrf   r9   rg   rx   )Ú	threadingÚThreadÚstartÚjoinÚAssertionError)rw   ry   Út1Út2r"   ru   r#   Útest_threading_behaviourË   s    
		r‚   c                 C   sL   t tj| ƒ}|f |ddi—Ž}t |¡}t |¡}t| d¡| d¡ƒ d S )NrW   rV   rX   )rL   r   rM   ÚpickleÚdumpsÚloadsr   rY   )rR   rS   rT   r^   Úobjr_   r"   r"   r#   Útest_pickleü   s
    

r‡   Úsize)r   rF   )r4   r3   )rG   r3   é   é   )r   r   )r   rF   c                 C   sP   t tƒ ƒ}| d kr(t | | ¡¡sLt‚n$t | ¡r8| f} | | ¡j| ksLt‚d S r&   )r   r   r   ZisscalarrY   r   Ú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   rF   rX   ©Únumç      $@ç      @)ÚlocÚscaler4   rB   )r   Únormr   rZ   Údefault_rngr   ÚlinspaceÚcheck_cont_samplesr   ÚppfÚbinomr   ÚsupportÚpmfÚarangeÚcheck_discr_samples)r,   Úurngrd   ÚurK   Úpvr"   r"   r#   Útest_with_scipy_distribution  s    r    c                 C   sn   |   d¡}| ¡ | ¡ f}t |d ¡r8t||ddd� |   d¡}t |j¡|_t||jƒj	}|dksjt
‚d S )Nrp   rF   gH¯¼šò×z>çš™™™™™¹?©ZrtolÚatoliô  )rY   ÚmeanÚvarr   Úisfiniter   Z	vectorizer'   r   Úpvaluer   )rd   r,   Úmv_exrY   ÚmvÚpvalr"   r"   r#   r–   (  s    

r–   c           	      C   sˆ   |   d¡}| ¡ | ¡ f}t||ddd� || ¡  }t |¡}tj|dd�\}}|| ¡  }||d |j…< t	||ƒj
}|dks„t‚d S )Nrp   çü©ñÒMbP?r¡   r¢   T)Zreturn_counts)rY   r¤   r¥   r   Úsumr   Z
zeros_likeÚuniquerˆ   r   r§   r   )	rd   rŸ   r¨   rY   r©   Z	obs_freqsÚ_Zfreqsrª   r"   r"   r#   rœ   5  s    

rœ   c               	   C   sZ   d} t jt| d�� ttƒ ddd� W 5 Q R X t jt| d�� ttƒ dd� W 5 Q R X d S )Nz.102 : center moved into domain of distributionrI   r   ©r3   rŠ   )ÚcenterrK   ©rK   )rN   ÚwarnsÚRuntimeWarningr
   r   )rQ   r"   r"   r#   Ú!test_warning_center_not_in_domainE  s
    r´   rR   c              	   C   s>   t tj| ƒ}d}tjt|d�� |tƒ ddd� W 5 Q R X d S )Nz17 : mode not in domainrI   r   r¯   )r0   rK   )rL   r   rM   rN   rO   r   r   )rR   rT   rQ   r"   r"   r#   Útest_error_mode_not_in_domainO  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 5 Q R X ttj|ƒ}|tƒ ƒ}d}t jt|d�� |jdtj 	d¡d� W 5 Q R X d S )	Nz&`qmc_engine` must be an instance of...rI   r   )Ú
qmc_engineú6`d` must be consistent with dimension of `qmc_engine`.r3   rG   ©Údr·   )
rN   rO   rj   rL   r   rM   r   ÚqrvsÚqmcÚHalton)r    rR   rJ   rT   Úgenr"   r"   r#   Útest_input_validation`  s    

zTestQRVS.test_input_validationNrF   r   ©r[   r3   )rF   )rF   )r‰   ©r‰   )rÁ   rÁ   )©rG   r‰   rÂ   )r3   )r3   Úqrngúsize_in, size_outzd_in, d_outc              	   C   s2  t jdkot ¡ d dk}|r0|dkr0t d¡ tƒ }ttj|ƒ}	|	|ƒ}
|d k	r–|d k	r–|j	|kr–d}tj
t|d�� |
j|||d� W 5 Q R X d S |d kr¸|d k	r¸|j	d	kr¸|j	f}|| }t|ƒ}|
j|||d
�}|d k	rî|j|ksît‚|d k	�r.| t |¡�p
d	¡}tj |¡ |¡}t||dd� d S )NÚwin32r   Ú32bitr
   z4NumericalInversePolynomial.qrvs fails for Win 32-bitr¸   rI   r¹   rF   ©rˆ   rº   r·   çê-�™—q=©r£   )ÚsysÚplatformÚarchitecturerN   Úxfailr   rL   r   rM   rº   rO   rj   r»   r   r‹   r   rZ   r   Úprodr“   r—   Úreshaper   )r    rÃ   Úsize_inÚsize_outZd_inZd_outrR   Zw32r,   rT   r¾   rJ   Zshape_expectedÚqrng2r»   ÚuniformÚqrvs2r"   r"   r#   Útest_QRVS_shape_consistencyv  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)r3   r‰   rŠ   r   rÀ   rÇ   .rÈ   rÉ   )r   rL   r   rM   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dsrN   Ú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dddg¡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d-d.d/gggZ ej d0e ¡d1d2„ ƒZ!d3d4„ Z"d5S )6Ú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ç      è?rF   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à   r3   gUUUUUUå?r"   r   r"   r"   r#   r'   Ã  s    z)TestTransformedDensityRejection.dist0.cdfc                 C   s   dS ©N)éÿÿÿÿrF   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   rA   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 ©NrA   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÷   rA   ç     ˆÃ@çÑ?rê   údist, mv_exc              	   C   s8   t ƒ �}| t¡ t|dd�}W 5 Q R X 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"   r5   r"   r"   r#   r6      r7   z(TestTransformedDensityRejection.<lambda>ú50 : bad construction points.úpdf, err, msgc              	   C   sD   G dd„ dƒ}||_ dd„ |_tj||d�� t|ƒ W 5 Q R X 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"   r5   r"   r"   r#   r6     r7   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>rI   ©r$   r%   rN   rO   r   ©r    r$   rP   rQ   r,   r"   r"   r#   Útest_bad_pdf  s
    
z,TestTransformedDensityRejection.test_bad_pdfzdpdf, err, msgc              	   C   sH   G dd„ dƒ}dd„ |_ ||_tj||d�� t|dd� W 5 Q R X 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"   r5   r"   r"   r#   r6     r7   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>rI   ©rF   r4   r±   r  )r    r%   rP   rQ   r,   r"   r"   r#   Útest_bad_dpdf  s
    
z-TestTransformedDensityRejection.test_bad_dpdfrH   c              	   C   s,   t j||d�� ttƒ |d� W 5 Q R X d S ©NrI   r±   )rN   rO   r   r   ©r    rK   rP   rQ   r"   r"   r#   Útest_inf_nan_domains  s    z4TestTransformedDensityRejection.test_inf_nan_domainsÚconstruction_pointsrä   r   r¡   c              	   C   s,   t jtdd�� ttƒ |d� W 5 Q R X d S )Nz1`construction_points` must be a positive integer.rI   ©r  ©rN   rO   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 5 Q R X ddddddg}t jtdd�� ttƒ |d� W 5 Q R X tjtjtjg}t jt	dd�� ttƒ |d� W 5 Q R X ddg}t jtd	d�� ttƒ d
|d� W 5 Q R X d S )NzC`construction_points` must either be a scalar or a non-empty array.rI   r  rF   z:33 : starting points not strictly monotonically increasingr   éöÿÿÿr4   z!50 : starting point out of domain)éýÿÿÿr3   )rK   r  )
rN   rO   rj   r   r   r²   r³   r   r>   r   r  r"   r"   r#   Ú"test_bad_construction_points_array$  s2     ÿ ÿ ÿ þzBTestTransformedDensityRejection.test_bad_construction_points_arrayÚcç      ð¿r   c              	   C   s0   d}t jt|d�� ttƒ dd� W 5 Q R X d S )Nz`c` must either be -0.5 or 0.rI   r  )r  r  )r    r  rQ   r"   r"   r#   Ú
test_bad_cH  s    z*TestTransformedDensityRejection.test_bad_crF   iè  r�   rñ   rB   rC   rá   r3   r‰   rž   c              	   C   sŠ   t tƒ dd�}tƒ �L}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W 5 Q R X t	||ddd	� |j
|j
ks†t‚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    rž   rd   rþ   ÚresÚexpectedr"   r"   r#   Útest_ppf_hatR  s    ÿ
z,TestTransformedDensityRejection.test_ppf_hatc              	   C   sl   G dd„ dƒ}d}t jt|d�� t|ƒ W 5 Q R X G dd„ dƒ}d}t jt|d�� t|ƒ W 5 Q R X d S )Nc                   @   s   e Zd ZdS )ú;TestTransformedDensityRejection.test_bad_dist.<locals>.distNr  r"   r"   r"   r#   r,   h  s   r,   z`pdf` required but not found.rI   c                   @   s   e Zd Zdd„ ZdS )r  c                 S   s   d| |   S rk   r"   r5   r"   r"   r#   r6   q  r7   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>N©r)   r*   r+   r$   r"   r"   r"   r#   r,   p  s   z`dpdf` required but not found.)rN   rO   rj   r   )r    r,   rQ   r"   r"   r#   Útest_bad_distf  s    z-TestTransformedDensityRejection.test_bad_distN)#r)   r*   r+   rç   rì   r÷   ÚdistsÚmv0Úmv1r   r<   Úmv2Úmv3ÚmvsrN   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Þ   º  sD   

ÿ





$
 þ
rÞ   c                
   @   s<  e Zd Zdddh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dddgddddd d!g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/S )0ÚTestDiscreteAliasUrnÚnchypergeom_fisherÚnchypergeom_walleniusÚrandintúdistname, paramsc           
      C   sª   || j k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.rF   r   z$DAU only works with a finite domain.r©   rü   rc   )Úbasic_fail_distsrN   ÚskipÚ
isinstanceÚstrrL   r   r™   r   r¦   r›   rš   r   rœ   ©
r    ÚdistnameÚparamsrQ   r,   rK   ÚkrŸ   r¨   rd   r"   r"   r#   rÿ   �  s    






zTestDiscreteAliasUrn.test_basicc                 C   s   t jS r&   r;   r5   r"   r"   r#   r6   ›  r7   zTestDiscreteAliasUrn.<lambda>rD   c                 C   s   t jS r&   r=   r5   r"   r"   r#   r6   ž  r7   c                 C   s   dS )NrA   r"   r5   r"   r"   r#   r6   ¡  r7   rE   c                 C   s   t S r&   r8   r5   r"   r"   r#   r6   ¤  r7   r:   c                 C   s   g S r&   r"   r5   r"   r"   r#   r6   §  r7   z)setting an array element with a sequence.c                 C   s   |  S r&   r"   r5   r"   r"   r#   r6   ª  r7   z50 : probability < 0c                   C   s   dS r?   r"   r"   r"   r"   r#   r6   ­  r7   r@   zpmf, err, msgc              	   C   s>   G dd„ dƒ}||_ tj||d�� t|dd� W 5 Q R X d S )Nc                   @   s   e Zd ZdS )z/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNr  r"   r"   r"   r#   r,   ³  s   r,   rI   r  r±   )rš   rN   rO   r   )r    rš   rP   rQ   r,   r"   r"   r#   Útest_bad_pmf±  s    z!TestDiscreteAliasUrn.test_bad_pmfrŸ   r.   r-   r/   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   )ÚweightsrG   )
r   ZasarrayZfloat64r   rY   r¬   r›   ÚlenZaveragerœ   )r    rŸ   rd   rY   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 5 Q R X d S ©NrI   ©rN   rO   rj   r   ©r    rŸ   rQ   r"   r"   r#   Útest_bad_pvÇ  s    z TestDiscreteAliasUrn.test_bad_pvr   rK   c              	   C   s2   t jtdd�� tt dd¡|d� W 5 Q R X d S ©Nzmust be finiterI   r4   rB   r±   )rN   rO   rj   r   r   r˜   ©r    rK   r"   r"   r#   Útest_inf_domainÑ  s    z$TestDiscreteAliasUrn.test_inf_domainc              	   C   s.   t jtdd�� tddgdd� W 5 Q R X d S )Nzrelative urn size < 1.rI   rñ   rä   )Z
urn_factor)rN   r²   r³   r   rå   r"   r"   r#   Útest_bad_urn_factorÖ  s    z(TestDiscreteAliasUrn.test_bad_urn_factorc              	   C   s8   d}G dd„ dƒ}t jt|d�� t|ƒ W 5 Q R X 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,   rI   r?  )r    rQ   r,   r"   r"   r#   Útest_bad_argsÚ  s    z"TestDiscreteAliasUrn.test_bad_argsN)r)   r*   r+   r0  rN   rÜ   rÝ   r   rÿ   rj   Ú	NameErrorr   Ú	TypeErrorZbad_pmfr8  r<  Úbad_pv_commonrA  r   r<   Ú
inf_domainrD  rE  rF  r"   r"   r"   r#   r+  x  sX   ý
ÿÿÿÿÿÿÿì
ÿ

$ 
ÿ
r+  c                   @   sŠ  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dddddddddddgZdd d!d"d#d$d%d&d'g	Zejjej d(e¡d)d*„ ƒƒZej d+e¡d,d-„ ƒZej d.e¡d/d0„ ƒZej d1e¡d2d3„ ƒZe
jd4d5d6d7�g g ge
j ge
j! e
j e
j!gd4e
j d8d9gd:d;e
j!gd<d=d>gggZ"ej d?e"¡d@dA„ ƒZ#e
jdBdCd6d7�g g ge
j ge
j! e
j e
j!gd4e
j d8d9gd:d;e
j!ge
j! d=d>gggZ$ej dDe$¡dEdF„ ƒZ%dGdH„ Z&d5dIdJe
j!e
j gZ'dKd9e
j!e
j gZ(ej dLe'¡dMdN„ ƒZ)ej dOe(¡dPdQ„ ƒZ*dRdS„ Z+dTdU„ Z,dVS )WÚ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çš™™™™™©?çÍÌÌÌÌÌÜ?rF   rG   ©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 )NrM  rF   gÍÌÌÌÌÌì?r   r   r9  ©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.supportNrL  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 )NrB   rM  rN  rF   rG   rO  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=
·?rG   r4   rQ  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.supportNrL  r"   r"   r"   r#   Údist3  s   rT  rA   rù   rê   gÍÌÌÌÌÌÜ¿çUUUUUUÕ?gìQ¸…ëÉ?rG   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_basicÚstudentized_rangeZ	trapezoidZtriangÚvonmisesÚlevy_stableÚkappa4ÚksoneÚkstwoZlevy_lÚ
gausshyperZanglitÚncfZparetoZchi2ZfatiguelifeZhalfgennormZgibratZlognormZncx2Útr/  c              	   C   s˜   || j krt d|› �¡ || jkr4t d|› �¡ t|tƒrHtt|ƒn|}||Ž }tƒ �}| 	t
¡ t|dd�}W 5 Q R X t||| ¡ | ¡ gƒ d S )NzPINV too slow for zPINV fails for rü   rc   )Úvery_slow_distsrN   r1  Ú
fail_distsr2  r3  rL   r   r   rý   r³   r
   r–   r¤   r¥   )r    r5  r6  r,   rþ   rd   r"   r"   r#   Útest_basic_all_scipy_dists3  s    

ÿþ
z9TestNumericalInversePolynomial.test_basic_all_scipy_distsr  c              	   C   sB   G dd„ dƒ}||_ tj||d�� t|ddgd� W 5 Q R X d S )Nc                   @   s   e Zd ZdS )z9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNr  r"   r"   r"   r#   r,   E  s   r,   rI   r   rŠ   r±   )r$   rN   rO   r
   r  r"   r"   r#   r  C  s    z+TestNumericalInversePolynomial.test_bad_pdfzlogpdf, err, msgc              	   C   sB   G dd„ dƒ}||_ tj||d�� t|ddgd� W 5 Q R X d S )Nc                   @   s   e Zd ZdS )z<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNr  r"   r"   r"   r#   r,   M  s   r,   rI   r   rŠ   r±   )ÚlogpdfrN   rO   r
   )r    rc  rP   rQ   r,   r"   r"   r#   Útest_bad_logpdfK  s    z.TestNumericalInversePolynomial.test_bad_logpdfrH   c              	   C   s,   t j||d�� ttƒ |d� W 5 Q R X d S r  )rN   rO   r
   r   r	  r"   r"   r#   r
  U  s    z3TestNumericalInversePolynomial.test_inf_nan_domainsr   rF   é'  r�   rñ   r¡   rB   rC   rá   r3   r‰   rž   c              	   C   sŽ   t ƒ }t|dd�}tƒ �L}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W 5 Q R X t||ddd� |j	|j	ksŠt
‚d S ©	Nç›+¡†›„=©Úu_resolutionr  r  r  r  g•dyáý¥=r¢   )r   r
   r   rý   r³   r—   r   r“   r   r‹   r   ©r    rž   r,   rd   rþ   r  r  r"   r"   r#   Útest_ppfi  s    
z'TestNumericalInversePolynomial.test_ppfr  r4   r!   c              	   C   sŽ   t ƒ }t|dd�}tƒ �L}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W 5 Q R X t||ddd� |j	|j	ksŠt
‚d S rf  )r   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*t‚||ks6t‚t|dd�}| ¡ \}}|dk sZt‚||ksft‚d S ©Ng»½×Ùß|Û=rh  rg  )r   r
   Úu_errorr   )r    r,   rd   Ú	max_errorÚmaer"   r"   r#   Útest_u_error‘  s    z+TestNumericalInversePolynomial.test_u_errorg      @é   g#B’¡œÇ;Úorderc              	   C   s4   t ƒ }d}tjt|d�� t||d� W 5 Q R X d S )Nz2`order` must be an integer in the range \[3, 17\].rI   ©rs  )r   rN   rO   rj   r
   )r    rs  r,   rQ   r"   r"   r#   Útest_bad_ordersŸ  s    z.TestNumericalInversePolynomial.test_bad_ordersri  c              	   C   s0   d}t jt|d�� ttƒ |d� W 5 Q R X d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rI   rh  )rN   rO   rj   r
   r   )r    ri  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 5 Q R X tƒ }t|ƒ}d}t jt|d�� | d¡ W 5 Q R X G dd„ dƒ}|ƒ }t|ƒ}d	}t jt|d�� | ¡  W 5 Q R X 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   rw  z9Either of the methods `pdf` or `logpdf` must be specifiedrI   z4`sample_size` must be greater than or equal to 1000.r4   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.)rN   rO   rj   r
   r   rn  )r    rw  r,   rQ   rd   rl   r"   r"   r#   rF  ®  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   rx  c                 S   s   t  |  |  d ¡S ©NrG   )Úmathr   r5   r"   r"   r#   r6   Ò  r7   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>c                 S   s   |  |  d S ry  r"   r5   r"   r"   r#   r6   ×  r7   r  gwJëÿï?rX   r�   )r$   r
   rc  r   r•   r   r—   )r    rx  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÷   rT  r!  r"  r#  r   r   r$  r%  r&  rN   rÜ   rÝ   r'  rÿ   r`  ra  Úxslowr   rb  r(  r  Úbad_logpdfs_commonrd  r*  r
  r•   r>   r<   rž   rk  r!   rl  rq  Z
bad_ordersZbad_u_resolutionru  rv  rF  r|  r"   r"   r"   r#   rK  æ  s€   ÿ
     þ
   ÿ

	
  ô
 "þ


rK  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d4dd	g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   rO  r   r"   r"   r#   r$   ä  s    z%TestNumericalInverseHermite.dist0.pdfc                 C   s   t jt  dt j | ¡ S )Nr   rQ  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   rF   r9  rQ  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ñ   rA   rO  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   rA   rñ   ©r   rR  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   g      Ð?rF   r   rA   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ä   rG   rU  rF   r‰   g      Ð¿g      Ø?g      °?rú   rs  r3   rŠ   c                 C   s   t ||dd�}t|||ƒ d S )Nrü   )rs  rW   )r   r–   )r    r,   r¨   rs  rd   r"   r"   r#   rÿ     s    z&TestNumericalInverseHermite.test_basicrH   c              	   C   s,   t j||d�� ttƒ |d� W 5 Q R X d S r  )rN   rO   r   r   r	  r"   r"   r#   r
     s    z0TestNumericalInverseHermite.test_inf_nan_domainsc           
      C   sæ   ddddh}ddddd	d
ddddddh}||kr:t  d¡ ||krLt  d¡ tj d¡ tt|ƒ|Ž }t|ƒ}tj 	d¡}t 
t | |¡| |¡ ¡t | |¡¡ ¡}t 
t | | |¡¡| ¡¡}	|dk sÖt‚|	dk sât‚d S )Nr[  r\  rY  ZskewnormÚbetar]  Zgeninvgaussr^  ZnctZnorminvgaussZgenhyperbolicrW  rX  rZ  ZinvgaussZwaldzDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r4   ç:Œ0âŽyE>rÈ   )rN   r1  rÍ   r   rZ   r[   rL   r   r   ZrandÚmaxró   r—   r'   r   )
r    r5  ÚshapesZ
slow_distsra  r,   Úfnir!   Zp_tolZu_tolr"   r"   r#   Úbasic_test_all_scipy_dists%  s,    
     þ

0 z6TestNumericalInverseHermite.basic_test_all_scipy_distszignore::RuntimeWarning)r5  r„  c                 C   s   |   ||¡ d S r&   ©r†  )r    r5  r„  r"   r"   r#   rb  >  s    z6TestNumericalInverseHermite.test_basic_all_scipy_distsc                 C   s   |   dd¡ d S )NZ	truncnorm)r¡   rG   r‡  rå   r"   r"   r#   Útest_basic_truncnorm_gh17155F  s    z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155c              	   C   s‚   d}t jt|d�� ttƒ dd� W 5 Q R X d}t jt|d�� tdƒ W 5 Q R X d}t jt|d�� ttƒ dd	� W 5 Q R X d S )
Nz"`order` must be either 1, 3, or 5.rI   rG   rt  z`cdf` required but not foundr“   z!could not convert string to floatZekkirh  )rN   rO   rj   r   r   )r    rJ   r"   r"   r#   r¿   J  s    ÿz1TestNumericalInverseHermite.test_input_validationNr   )é   )r‰  )©r‰   rŠ   é   rŠ  rd   rÄ   c           
      C   sp   t ƒ }t|ƒ}t|ƒ}|j||d�}|d k	r:|j|ks:t‚|d k	rlt|ƒ}|j|d�}tj	 
|¡}	t||	ƒ d S )N)rˆ   rW   )rˆ   )r   r   r   rY   r‹   r   r   rÓ   r   r“   r—   r   )
r    rd   rÐ   rÑ   r,   r…  r_   rY   rÓ   ra   r"   r"   r#   Útest_RVS\  s    z$TestNumericalInverseHermite.test_RVSc              	   C   sF   d}d}t jt|d�� ttj|Ž ƒ W 5 Q R X 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 tailrI   r‚  rh  )rN   r²   r³   r   r   r�  )r    r„  rJ   r"   r"   r#   Útest_inaccurate_CDFm  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_distributionrA   r   re  r�   rñ   r¡   rB   rC   rá   rž   c              	   C   sŽ   t ƒ }t|dd�}tƒ �L}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W 5 Q R X t||ddd	� |j	|j	ksŠt
‚d S )
NrÈ   rh  r  r  r  r  g•Ö&è.>gLÎaã§�ô=r¢   )r   r   r   rý   r³   r—   r   r“   r   r‹   r   rj  r"   r"   r#   rk  “  s    
z$TestNumericalInverseHermite.test_ppfc              	   C   s†   t ƒ }t|dd�}| ¡ \}}|dk s*t‚||ks6t‚tƒ �}| t¡ t|dd�}W 5 Q R X | ¡ \}}|dk svt‚||ks‚t‚d S rm  )r   r   rn  r   r   rý   r³   )r    r,   rd   ro  rp  rþ   r"   r"   r#   rq  ¥  s    
z(TestNumericalInverseHermite.test_u_error))r)   r*   r+   rç   rì   r!  r   r   r"  r#  r&  rN   rÜ   rÝ   r'  rÿ   r*  r
  r†  Úfilterwarningsr}  r   rb  rˆ  r¿   rZ   r\   ZrngsÚappendr”   rÚ   rÛ   rŒ  r�  rŽ  r•   r>   r<   rž   rk  rq  r"   r"   r"   r#   r  Þ  sP   & ÿ



  ô
r  c                   @   s  e Zd Zdddh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dddg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 )"ÚTestDiscreteGuideTabler,  r-  r.  c              	   C   s<   dddg}t j ¡ }t t¡� t||dd� W 5 Q R X d S )Nr¡   ç333333Ó?ç333333ã?r2   ©rW   Zguide_factor©r   rZ   r”   rN   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   s<   dddg}t j ¡ }t t¡� t||dd� W 5 Q R X d S )Nr¡   r’  r“  r   r”  r•  r–  r"   r"   r#   Ú%test_guide_factor_zero_raises_warningÁ  s    

z<TestDiscreteGuideTable.test_guide_factor_zero_raises_warningc              	   C   s<   dddg}t j ¡ }t t¡� t||dd� W 5 Q R X d S )Nr¡   r’  r“  rä   r”  r•  r–  r"   r"   r#   Ú)test_negative_guide_factor_raises_warningÇ  s    

z@TestDiscreteGuideTable.test_negative_guide_factor_raises_warningr/  c           
      C   sª   || j k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.rF   r   z$DGT only works with a finite domain.r©   rü   rc   )r0  rN   r1  r2  r3  rL   r   r™   r   r¦   r›   rš   r	   rœ   r4  r"   r"   r#   rÿ   Ð  s    






z!TestDiscreteGuideTable.test_basicr   rF   re  r�   rñ   r¡   rB   rC   rá   r3   r‰   rž   c           	   	   C   s˜   d\}}t  ||¡}t|dd�}tƒ �P}| td¡ | td¡ | td¡ | td¡ | |¡}t j |||¡}W 5 Q R X 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#   rk  ø  s    
zTestDiscreteGuideTable.test_ppfr=  c              	   C   s&   t jt|d�� t|ƒ W 5 Q R X d S r>  )rN   rO   rj   r	   r@  r"   r"   r#   rA    s    z"TestDiscreteGuideTable.test_bad_pvrK   c              	   C   s2   t jtdd�� tt dd¡|d� W 5 Q R X d S rB  )rN   rO   rj   r	   r   r˜   rC  r"   r"   r#   rD    s    z&TestDiscreteGuideTable.test_inf_domainN)r)   r*   r+   r0  r—  r˜  r™  rN   rÜ   rÝ   r   rÿ   r   r•   r>   r<   rž   rk  rI  rA  rJ  rD  r"   r"   r"   r#   r‘  ´  s6   ý	
  õ

$ 
ÿ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î   r0   rï   r"   r"   r#   ri   "  s    z%TestSimpleRatioUniforms.dist.__init__c                 C   s&   || j 8 }dt|ƒd  }d| | S rð   rò   rô   r"   r"   r#   r$   &  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,   !  s   r,   rA   rø   rú   c                 C   sF   t ||jdd�}t|||ƒ t ||j| |j¡dd�}t|||ƒ d S )Nrü   )r0   rW   )r0   Zcdf_at_moderW   )r   r0   r–   r'   rV  r"   r"   r#   rÿ   9  s    
þz"TestSimpleRatioUniforms.test_basicrH   c              	   C   s,   t j||d�� ttƒ |d� W 5 Q R X d S r  )rN   rO   r   r   r	  r"   r"   r#   r
  E  s    z,TestSimpleRatioUniforms.test_inf_nan_domainsc              	   C   s.   t jtdd�� ttƒ ddd� W 5 Q R X d S )Nz`pdf_area` must be > 0rI   r   rä   )r0   Zpdf_area)rN   rO   rj   r   r   rå   r"   r"   r#   rF  J  s    z%TestSimpleRatioUniforms.test_bad_argsN)r)   r*   r+   r,   r!  r   r<   r#  r$  r&  rN   rÜ   rÝ   r'  rÿ   r*  r
  rF  r"   r"   r"   r#   rœ    s   

ÿ


rœ  )Jr{   rƒ   rN   Úcopyr   rË   rÊ   rz  Únumpyr   Znumpy.testingr   r   r   Z	numpy.libr   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floaterrrH  rG  r(  r)  r~  r>   r<   rI  rj   Zbad_sized_domainsZbad_domainsr*  Znan_domainsrÜ   rÝ   rU   rb   re   r‚   r‡   rŒ   r    r–   rœ   r´   rµ   r¶   rÞ   r+  rK  r  r‘  rœ  r"   r"   r"   r#   Ú<module>   sÚ   $	ú	
ÿôöö
ûü	þøþÿÿ
1
 ÿ


þ

ÿ[ ?n y Wi