o
    Ö­jÕ  ã                	   @   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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r§ej&j(dk r§d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                   @   ó$   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$   ú\/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/stats/tests/test_sampling.pyÚpdf!   s   &zStandardNormal.pdfc                 C   s,   dt  dt j ¡ |  t  d| | ¡ S r   r   r!   r$   r$   r%   Údpdf%   s   ,zStandardNormal.dpdfc                 C   s
   t  |¡S ©N)r   Úndtrr!   r$   r$   r%   Úcdf(   ó   
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   )r0   ÚmodeÚpypy)é   é   é
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                 C   ó   |  S r(   r$   ©r#   r$   r$   r%   Ú<lambda>@   ó    r;   z...c                 C   ó   g S r(   r$   r:   r$   r$   r%   r;   B   ó    c                 C   ó   t S r(   ©Úfoor:   r$   r$   r%   r;   D   r>   úname 'foo' is not definedc                 C   ó   t jS r(   ©r   Úinfr:   r$   r$   r%   r;   F   r<   c                 C   rC   r(   ©r   Únanr:   r$   r$   r%   r;   H   r<   c                   C   ó   dS ©Nr   r$   r$   r$   r$   r%   r;   J   r>   ú,takes 0 positional arguments but 1 was givenc                 C   rC   r(   rD   r:   r$   r$   r%   r;   Q   r<   c                 C   rC   r(   rF   r:   r$   r$   r%   r;   S   r<   c                 C   r=   r(   r$   r:   r$   r$   r%   r;   U   r>   c                 C   r?   r(   r@   r:   r$   r$   r%   r;   W   r>   c                   C   rH   rI   r$   r$   r$   r$   r%   r;   Y   r>   c                 C   r=   r(   r$   r:   r$   r$   r%   r;   `   r>   c                 C   r?   r(   r@   r:   r$   r$   r%   r;   b   r>   c                 C   rC   r(   rD   r:   r$   r$   r%   r;   d   r<   c                 C   rC   r(   rF   r:   r$   r$   r%   r;   f   r<   c                   C   rH   rI   r$   r$   r$   r$   r%   r;   h   r>   z!must contain at least one elementr   ç        z0wrong number of dimensions \(expected 1, got 2\)çš™™™™™É?çš™™™™™Ù?r3   ú)must contain only finite / non-nan valuesú(must contain at least one non-zero value)é   é   r7   zmust be a length 2 tupler$   )rQ   rP   zleft >= right)rP   rP   )r8   r8   zonly non-nan valuesúdomain, err, msgzmethod, kwargsc                 C   sV   t tj|ƒ}tj||d�� |di |¤d| i¤Ž W d   ƒ d S 1 s$w   Y  d S )N©ÚmatchÚdomainr$   )Úgetattrr   ÚsamplingÚpytestr   )rU   ÚerrÚmsgÚmethodÚkwargsÚMethodr$   r$   r%   Útest_bad_domain™   s   "ÿr^   c           
      C   s  t tj| ƒ}d}|di |¤d|i¤Ž}|di |¤d|i¤Ž}t| d¡| d¡ƒ tj d¡ |di |¤Ž}| d¡}tj d ¡ |di |¤ddi¤Ž}| d¡}t||ƒ tj tj 	d¡¡}tj 
tj 	d¡¡}	|di |¤d|i¤Ž}|di |¤d|	i¤Ž}t| d¡| d¡ƒ d S )Né{   Úrandom_stateéd   r$   )rV   r   rW   r   Úrvsr   ÚrandomÚseedÚRandomStateÚMT19937Ú	Generator)
r[   r\   r]   rd   Úrng1Úrng2Úrvs1Úrvs2Úseed1Úseed2r$   r$   r%   Útest_random_state£   s"   


rn   c                  C   sr   t tƒ dd�} t tƒ ƒ}| d¡ t|  d¡| d¡ƒ t tƒ dd�}| d¡}| d¡ | d¡}t||ƒ d S )Nr_   ©r`   ra   )r   r   Úset_random_stater   rb   )rh   ri   Úrngrj   rk   r$   r$   r%   Útest_set_random_stateÀ   s   




rr   c                     s�   d d dœ‰G dd„ dƒ‰ ‡ ‡fdd„} ‡ ‡fdd„}t j| d�}t j|d�}| ¡  | ¡  | ¡  | ¡  ˆd	 d
ks>J ‚ˆd dksFJ ‚d S )N)Úerr1Úerr2c                   @   r   )z.test_threading_behaviour.<locals>.Distributionc                 S   ó
   || _ d S r(   )Úpdf_msg)r"   rv   r$   r$   r%   Ú__init__Ó   r+   z7test_threading_behaviour.<locals>.Distribution.__init__c                 S   s(   d|  k r
dk rn |S t | jƒ‚|S )Ng33333óH@g      I@)Ú
ValueErrorrv   r!   r$   r$   r%   r&   Ö   s   
ÿz2test_threading_behaviour.<locals>.Distribution.pdfc                 S   rH   ©NrP   r$   r!   r$   r$   r%   r'   Û   ó   z3test_threading_behaviour.<locals>.Distribution.dpdfN)r-   r.   r/   rw   r&   r'   r$   r$   r$   r%   ÚDistributionÒ   ó    r{   c               
      ó\   ˆ dƒ} t | ddd�}z| d¡ W d S  ty- } z|jd ˆd< W Y d }~d S d }~ww )NrA   ©r8   ra   é   ©rU   r`   é † r   rs   ©r   rb   rx   Úargs©r0   rq   Úe©r{   Úerrorsr$   r%   Úfunc1Þ   ó   ÿ€ÿz'test_threading_behaviour.<locals>.func1c               
      r}   )NÚbarr~   rQ   r€   r�   r   rt   r‚   r„   r†   r$   r%   Úfunc2ç   r‰   z'test_threading_behaviour.<locals>.func2)Útargetrs   rA   rt   rŠ   )Ú	threadingÚThreadÚstartÚjoin)rˆ   r‹   Út1Út2r$   r†   r%   Útest_threading_behaviourÌ   s   
		r“   c                 C   sP   t tj| ƒ}|di |¤ddi¤Ž}t |¡}t |¡}t| d¡| d¡ƒ d S )Nr`   r_   ra   r$   )rV   r   rW   ÚpickleÚdumpsÚloadsr   rb   )r[   r\   r]   rh   Úobjri   r$   r$   r%   Útest_pickleý   s
   

r˜   Úsize)Nr   )r   rP   )r8   r7   )rQ   r7   é   é   )r   r   )r   rP   c                 C   sR   t tƒ ƒ}| d u rt | | ¡¡sJ ‚d S t | ¡r| f} | | ¡j| ks'J ‚d S r(   )r   r   r   Úisscalarrb   Úshape)r™   rq   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   ro   rP   ra   ©Únumç      $@ç      @)ÚlocÚscaler8   rL   )r   Únormr   rc   Údefault_rngr
   ÚlinspaceÚcheck_cont_samplesr   ÚppfÚbinomr   ÚsupportÚpmfÚarangeÚcheck_discr_samples)r0   Úurngrq   ÚurU   Úpvr$   r$   r%   Útest_with_scipy_distribution  s   r²   çH¯¼šò×z>çš™™™™™¹?c                 C   sn   |   d¡}| ¡ | ¡ f}t |d ¡rt||||d� |   d¡}t |j¡|_t||jƒj	}|dks5J ‚d S )Nr�   rP   ©ÚrtolÚatoliô  r´   )
rb   ÚmeanÚvarr   Úisfiniter   Ú	vectorizer*   r   Úpvalue)rq   r0   Úmv_exr¶   r·   rb   ÚmvÚpvalr$   r$   r%   r¨   )  s   

r¨   çü©ñÒMbP?c                 C   sˆ   |   d¡}| ¡ | ¡ f}t||||d� || ¡  }t |¡}tj|dd�\}}	|	|	 ¡  }	|	|d |	j…< t	||ƒj
}
|
dksBJ ‚d S )Nr�   rµ   T)Úreturn_countsr´   )rb   r¸   r¹   r   Úsumr   Ú
zeros_likeÚuniquer™   r   r¼   )rq   r±   r½   r¶   r·   rb   r¾   Ú	obs_freqsÚ_Ú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 sw   Y  t jt| d�� ttƒ dd� W d   ƒ d S 1 s;w   Y  d S )Nz.102 : center moved into domain of distributionrS   r   ©r7   r›   )ÚcenterrU   ©rU   )rX   ÚwarnsÚRuntimeWarningr	   r   )rZ   r$   r$   r%   Ú!test_warning_center_not_in_domainF  s   ÿ"ÿrÍ   r[   )r   r	   r   c                 C   sT   t tj| ƒ}d}tjt|d�� |tƒ ddd� W d   ƒ d S 1 s#w   Y  d S )Nz17 : mode not in domainrS   r   rÈ   )r4   rU   )rV   r   rW   rX   r   r   r   )r[   r]   rZ   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�� ttj|ƒ}|tƒ ƒ}|jdd� W d   ƒ n1 s%w   Y  ttj|ƒ}|tƒ ƒ}d}t jt|d�� |jdtj 	d¡d� W d   ƒ d S 1 sUw   Y  d S )	Nz&`qmc_engine` must be an instance of...rS   r   )Ú
qmc_engineú6`d` must be consistent with dimension of `qmc_engine`.r7   rQ   ©ÚdrÐ   )
rX   r   rx   rV   r   rW   r   ÚqrvsÚqmcÚHalton)r"   r[   rT   r]   Úgenr$   r$   r%   Útest_input_validationa  s   
ý
"ÿzTestQRVS.test_input_validationNrP   r   ©rd   r7   )rP   ©rP   )rš   ©rš   )rÛ   rÛ   )©rQ   rš   rÜ   )r7   ©r7   Úqrngúsize_in, size_outzd_in, d_outc                 C   sH  t jdkot ¡ d dk}|r|dkrt d¡ tƒ }ttj|ƒ}	|	|ƒ}
|d urV|d urV|j	|krVd}tj
t|d�� |
j|||d� W d   ƒ d S 1 sOw   Y  d S |d u rg|d urg|j	d	krg|j	f}|| }t|ƒ}|
j|||d
�}|d ur‚|j|ks‚J ‚|d ur¢| t |¡pŽd	¡}tj |¡ |¡}t||dd� d S d S )NÚwin32r   Ú32bitr	   z4NumericalInversePolynomial.qrvs fails for Win 32-bitrÑ   rS   rÒ   rP   ©r™   rÓ   rÐ   çê-�™—q=©r·   )ÚsysÚplatformÚarchitecturerX   Úxfailr   rV   r   rW   rÓ   r   rx   rÔ   r   r�   rc   r   Úprodr¥   r©   Úreshaper   )r"   rÞ   Úsize_inÚsize_outÚd_inÚd_outr[   Úw32r0   r]   r×   rT   Úshape_expectedÚqrng2rÔ   ÚuniformÚqrvs2r$   r$   r%   Útest_QRVS_shape_consistencyw  s4   

ÿþýz$TestQRVS.test_QRVS_shape_consistencyc                 C   s°   t ƒ }ttj|ƒ}||ƒ}d}d}tjj|dd�}tjj|dd�}| t |¡¡}	|j	|||d�}
tj
 |	¡}t|ƒD ]}|
d|f }|d d …|f  |¡}t||dd� q;d S )	N)r7   rš   r›   r   rÙ   râ   .rã   rä   )r   rV   r   rW   rÕ   rÖ   rc   r   ré   rÔ   r¥   r©   Úrangerê   r   )r"   r[   r0   r]   r×   r™   rÓ   rÞ   rñ   rò   rÔ   ró   ÚiÚsampleÚsample2r$   r$   r%   Útest_QRVS_size_tupleœ  s   ýzTestQRVS.test_QRVS_size_tuple)r-   r.   r/   rØ   r   rÕ   ÚSobolrÖ   ÚqrngsÚtupleÚsizesÚdsrX   ÚmarkÚparametrizerô   rù   r$   r$   r$   r%   rÏ   ^  s    "ÿ"rÏ   c                
   @   s¤  e Zd ZG dd„ dƒZG dd„ dƒZG dd„ dƒZeƒ eƒ edƒedƒgZdd	gZdd
gZde	j
gZde	j
gZeeeegZej deeeƒ¡dd„ ƒZdd„ edfgZee7 Zej de¡dd„ ƒZej de¡dd„ ƒZej de¡dd„ ƒZej dg d¢¡dd„ ƒZdd„ Zej d d!e	je	j
d"d#g¡d$d%„ ƒZe	jd&d'd(d)�g g ge	jge	j
 e	je	j
gd&e	jd*d"gd+d,e	j
gg d-¢ggZ ej d.e ¡d/d0„ ƒZ!d1d2„ Z"d3S )4ÚTestTransformedDensityRejectionc                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z%TestTransformedDensityRejection.dist0c                 C   ó   dd||   S ©Nç      è?rP   r$   r!   r$   r$   r%   r&   ¾  ó   z)TestTransformedDensityRejection.dist0.pdfc                 C   s   dd|  S )Nr  éþÿÿÿr$   r!   r$   r$   r%   r'   Á  ó   z*TestTransformedDensityRejection.dist0.dpdfc                 C   ó   d||d d  d  S ©Nr  r7   gUUUUUUå?r$   r!   r$   r$   r%   r*   Ä  ó   z)TestTransformedDensityRejection.dist0.cdfc                 C   rH   ©N)éÿÿÿÿrP   r$   ©r"   r$   r$   r%   r«   Ç  rz   z-TestTransformedDensityRejection.dist0.supportN©r-   r.   r/   r&   r'   r*   r«   r$   r$   r$   r%   Údist0½  ó
    r  c                   @   r   )z%TestTransformedDensityRejection.dist1c                 C   ó   t j |d ¡S ©Nr´   ©r   r¥   Ú_pdfr!   r$   r$   r%   r&   Ì  r  z)TestTransformedDensityRejection.dist1.pdfc                 C   s   | d t j |d ¡ S )Nç{®Gáz„?r´   r  r!   r$   r$   r%   r'   Ï  ó   z*TestTransformedDensityRejection.dist1.dpdfc                 C   r  r  ©r   r¥   Ú_cdfr!   r$   r$   r%   r*   Ò  r  z)TestTransformedDensityRejection.dist1.cdfNr,   r$   r$   r$   r%   Údist1Ë  ó    r  c                   @   r  )
z%TestTransformedDensityRejection.dist2c                 C   ru   r(   ©Úshift©r"   r  r$   r$   r%   rw   Ù  r+   z.TestTransformedDensityRejection.dist2.__init__c                 C   ó&   || j 8 }dt|ƒd  }d| | S ©Nr   ç      à?©r  Úabs©r"   r#   Úyr$   r$   r%   r&   Ü  ó   
z)TestTransformedDensityRejection.dist2.pdfc                 C   s8   || j 8 }dt|ƒd  }|| | }|dk r|S | S )Nr   rK   r"  r$  r$   r$   r%   r'   á  s   
z*TestTransformedDensityRejection.dist2.dpdfc                 C   ó.   || j 8 }|dkrdd|  S ddd|   S ©NrK   r!  r   r  r!   r$   r$   r%   r*   ç  ó   
z)TestTransformedDensityRejection.dist2.cdfN)r-   r.   r/   rw   r&   r'   r*   r$   r$   r$   r%   Údist2Ø  s
    r*  rK   ç     ˆÃ@çÑ?r  údist, mv_exc                 C   sL   t ƒ �}| t¡ t|dd�}W d   ƒ n1 sw   Y  t|||ƒ d S ©Né*   ro   )r   ÚfilterrÌ   r   r¨   )r"   r0   r½   Úsuprq   r$   r$   r%   Ú
test_basic÷  s
   
ýz*TestTransformedDensityRejection.test_basicc                 C   rH   )Nr   r$   r:   r$   r$   r%   r;     r>   z(TestTransformedDensityRejection.<lambda>ú50 : bad construction points.úpdf, err, msgc                 C   sZ   G dd„ dƒ}||_ dd„ |_tj||d�� t|ƒ W d   ƒ d S 1 s&w   Y  d S )Nc                   @   ó   e Zd ZdS )z:TestTransformedDensityRejection.test_bad_pdf.<locals>.distN©r-   r.   r/   r$   r$   r$   r%   r0     ó    r0   c                 S   rH   ry   r$   r:   r$   r$   r%   r;   	  r>   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>rS   ©r&   r'   rX   r   r   ©r"   r&   rY   rZ   r0   r$   r$   r%   Útest_bad_pdf  s   

"ÿz,TestTransformedDensityRejection.test_bad_pdfzdpdf, err, msgc                 C   s^   G dd„ dƒ}dd„ |_ ||_tj||d�� t|dd� W d   ƒ d S 1 s(w   Y  d S )Nc                   @   r5  )z;TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNr6  r$   r$   r$   r%   r0     r7  r0   c                 S   s   | S r(   r$   r:   r$   r$   r%   r;     r>   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>rS   ©rP   r8   rÊ   r8  )r"   r'   rY   rZ   r0   r$   r$   r%   Útest_bad_dpdf  s   
"ÿz-TestTransformedDensityRejection.test_bad_dpdfrR   c                 C   óB   t j||d�� ttƒ |d� W d   ƒ d S 1 sw   Y  d S ©NrS   rÊ   )rX   r   r   r   ©r"   rU   rY   rZ   r$   r$   r%   Útest_inf_nan_domains  ó   "ÿz4TestTransformedDensityRejection.test_inf_nan_domainsÚconstruction_points)r  r   r´   c                 C   sB   t jtdd�� ttƒ |d� W d   ƒ d S 1 sw   Y  d S )Nz1`construction_points` must be a positive integer.rS   ©rB  ©rX   r   rx   r   r   ©r"   rB  r$   r$   r%   Ú#test_bad_construction_points_scalar  s
   ÿ"þzCTestTransformedDensityRejection.test_bad_construction_points_scalarc                 C   s  g }t jtdd�� ttƒ |d� W d   ƒ n1 sw   Y  g d¢}t jtdd�� ttƒ |d� W d   ƒ n1 s=w   Y  tjtjtjg}t jt	dd�� ttƒ |d� W d   ƒ n1 scw   Y  ddg}t jtd	d�� ttƒ d
|d� W d   ƒ d S 1 s‡w   Y  d S )NzC`construction_points` must either be a scalar or a non-empty array.rS   rC  )rP   rP   rP   rP   rP   rP   z:33 : starting points not strictly monotonically increasingr3  éöÿÿÿr8   z!50 : starting point out of domain)éýÿÿÿr7   )rU   rB  )
rX   r   rx   r   r   rË   rÌ   r   rG   r   rE  r$   r$   r%   Ú"test_bad_construction_points_array%  s2   ÿýÿýÿþþ"þzBTestTransformedDensityRejection.test_bad_construction_points_arrayÚcç      ð¿r´   r   c                 C   sF   d}t jt|d�� ttƒ dd� W d   ƒ d S 1 sw   Y  d S )Nz`c` must either be -0.5 or 0.rS   rK  )rJ  rD  )r"   rJ  rZ   r$   r$   r%   Ú
test_bad_cI  s   "ÿz*TestTransformedDensityRejection.test_bad_cr   rP   éè  rŸ   r!  rL   rM   ©r  r7   rš   r°   c                 C   sž   t tƒ dd�}tƒ �+}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 s8w   Y  t	||ddd	� |j
|j
ksMJ ‚d S )
Ng§èH.ÿï?)Ú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   r0  rÌ   Úppf_hatr   r¥   r©   r   r�   )r"   r°   rq   r1  Ú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w   Y  G dd„ dƒ}d}t jt|d�� t|ƒ W d   ƒ d S 1 sDw   Y  d S )Nc                   @   r5  )ú;TestTransformedDensityRejection.test_bad_dist.<locals>.distNr6  r$   r$   r$   r%   r0   i  r7  r0   z`pdf` required but not found.rS   c                   @   ó   e Zd Zdd„ ZdS )rY  c                 S   s   d| |   S ry   r$   r:   r$   r$   r%   r;   r  ó    zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>N©r-   r.   r/   r&   r$   r$   r$   r%   r0   q  ó    z`dpdf` required but not found.)rX   r   rx   r   )r"   r0   rZ   r$   r$   r%   Útest_bad_distg  s   
ÿ
"ÿz-TestTransformedDensityRejection.test_bad_distN)#r-   r.   r/   r  r  r*  ÚdistsÚmv0Úmv1r   rE   Úmv2Úmv3ÚmvsrX   rÿ   r   Úzipr2  r   Úbad_pdfsÚbad_pdfs_commonr:  Úbad_dpdf_commonr<  Úinf_nan_domainsr@  rF  rI  rG   rL  r§   r°   rX  r^  r$   r$   r$   r%   r  »  sD    

ÿ





$
þ
r  c                	   @   s8  e Zd Zh d£Zej de¡dd„ ƒZdd„ e	dfdd„ e	dfd	d„ e	d
fdd„ e
dfdd„ e	dfdd„ edfdd„ edfgZej de¡dd„ ƒZej dg d¢g d¢g¡dd„ ƒZej de¡dd„ ƒZej ejfejejfej ej fdejfej dfgZej de¡d d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(S ))ÚTestDiscreteAliasUrn>   ÚrandintÚnchypergeom_fisherÚnchypergeom_walleniusúdistname, paramsc           
      C   óª   || j v rd}t |¡ t|tƒs|}ntt|ƒ}||Ž }| ¡ }t 	|d |d  ¡s1t d¡ t 
|d |d d ¡}| |¡}| d¡}t|dd�}	t|	||ƒ d S )NzYDAU fails on these probably because of large domains and small computation errors in PMF.rP   r   z$DAU only works with a finite domain.r¾   r/  ro   )Úbasic_fail_distsrX   ÚskipÚ
isinstanceÚstrrV   r   r«   r   rº   r­   r¬   r   r®   ©
r"   ÚdistnameÚparamsrZ   r0   rU   Úkr±   r½   rq   r$   r$   r%   r2  ‚  s   






zTestDiscreteAliasUrn.test_basicc                 C   rC   r(   rD   r:   r$   r$   r%   r;   œ  r<   zTestDiscreteAliasUrn.<lambda>rN   c                 C   rC   r(   rF   r:   r$   r$   r%   r;   Ÿ  r<   c                 C   rH   )NrK   r$   r:   r$   r$   r%   r;   ¢  r>   rO   c                 C   r?   r(   r@   r:   r$   r$   r%   r;   ¥  r>   rB   c                 C   r=   r(   r$   r:   r$   r$   r%   r;   ¨  r>   z)setting an array element with a sequence.c                 C   r9   r(   r$   r:   r$   r$   r%   r;   «  r<   z50 : probability < 0c                   C   rH   rI   r$   r$   r$   r$   r%   r;   ®  r>   rJ   zpmf, err, msgc                 C   sT   G dd„ dƒ}||_ tj||d�� t|dd� W d   ƒ d S 1 s#w   Y  d S )Nc                   @   r5  )z/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNr6  r$   r$   r$   r%   r0   ´  r7  r0   rS   r;  rÊ   )r¬   rX   r   r   )r"   r¬   rY   rZ   r0   r$   r$   r%   Útest_bad_pmf²  s
   "ÿz!TestDiscreteAliasUrn.test_bad_pmfr±   )r2   r1   r3   )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)Údtyper_   ro   r�   r   )ÚweightsrQ   )
r   ÚasarrayÚfloat64r   rb   rÂ   r­   ÚlenÚaverager®   )r"   r±   rq   ÚvariatesÚ
m_expectedÚ
v_expectedÚmv_expectedr$   r$   r%   Útest_sampling_with_pvº  s   
z*TestDiscreteAliasUrn.test_sampling_with_pvúpv, msgc                 C   ó<   t jt|d�� t|ƒ W d   ƒ d S 1 sw   Y  d S ©NrS   ©rX   r   rx   r   ©r"   r±   rZ   r$   r$   r%   Útest_bad_pvÈ  ó   
"ÿz TestDiscreteAliasUrn.test_bad_pvr   rU   c                 C   óH   t jtdd�� tt dd¡|d� W d   ƒ d S 1 sw   Y  d S ©Nzmust be finiterS   r8   rL   rÊ   )rX   r   rx   r   r   rª   ©r"   rU   r$   r$   r%   Útest_inf_domainÒ  ó   "ÿz$TestDiscreteAliasUrn.test_inf_domainc                 C   sD   t jtdd�� tddgdd� W d   ƒ d S 1 sw   Y  d S )Nzrelative urn size < 1.rS   r!  r  )Ú
urn_factor)rX   rË   rÌ   r   r  r$   r$   r%   Útest_bad_urn_factor×  s   "ÿz(TestDiscreteAliasUrn.test_bad_urn_factorc                 C   sN   d}G dd„ dƒ}t jt|d�� t|ƒ W d   ƒ d S 1 s w   Y  d S )NzG`domain` must be provided when the probability vector is not available.c                   @   rZ  )z0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                 S   s   |S r(   r$   r!   r$   r$   r%   r¬   à  rz   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmfN)r-   r.   r/   r¬   r$   r$   r$   r%   r0   ß  r]  r0   rS   rˆ  )r"   rZ   r0   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/  ro   )g     ð‡@g    
àAg{®Gázt?)r¶   )r   Úsoftmaxr   Úonesr   r®   )r"   r±   rq   r$   r$   r%   Útest_gh19359æ  s
   
ÿz!TestDiscreteAliasUrn.test_gh19359N)r-   r.   r/   rp  rX   rÿ   r   r   r2  rx   Ú	NameErrorr   Ú	TypeErrorÚbad_pmfrx  r„  Úbad_pv_commonrŠ  r   rE   Ú
inf_domainr�  r’  r“  r–  r$   r$   r$   r%   rj  y  sT    
ÿÿÿÿÿÿÿì
ÿ

$ÿ
rj  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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#ejj$d3d4„ ƒZ%d!d5d6e
je
jgZ&d7d%e
je
jgZ'ej d8e&¡d9d:„ ƒZ(ej d;e'¡d<d=„ ƒZ)d>d?„ Z*d@dA„ Z+dBS )CÚTestNumericalInversePolynomialc                   @   r   )z$TestNumericalInversePolynomial.dist0c                 C   r  r  r$   r!   r$   r$   r%   r&   ñ  r  z(TestNumericalInversePolynomial.dist0.pdfc                 C   r	  r
  r$   r!   r$   r$   r%   r*   ô  r  z(TestNumericalInversePolynomial.dist0.cdfc                 C   rH   r  r$   r  r$   r$   r%   r«   ÷  rz   z,TestNumericalInversePolynomial.dist0.supportN©r-   r.   r/   r&   r*   r«   r$   r$   r$   r%   r  ð  r  r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )z$TestNumericalInversePolynomial.dist1c                 C   r  r  r  r!   r$   r$   r%   r&   ü  r  z(TestNumericalInversePolynomial.dist1.pdfc                 C   r  r  r  r!   r$   r$   r%   r*   ÿ  r  z(TestNumericalInversePolynomial.dist1.cdfN)r-   r.   r/   r&   r*   r$   r$   r$   r%   r  û  s    r  c                   @   r   )z$TestNumericalInversePolynomial.dist2c                 C   s    dddt  dt j | ¡   S )Nçš™™™™™©?çÍÌÌÌÌÌÜ?rP   rQ   ©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 )Nrž  rP   gÍÌÌÌÌÌì?r   r   ry  ©r   r   Úcosr!   r$   r$   r%   r*     s
   
,ÿÿz(TestNumericalInversePolynomial.dist2.cdfc                 C   rH   r  r$   r  r$   r$   r%   r«     rz   z,TestNumericalInversePolynomial.dist2.supportNr�  r$   r$   r$   r%   r*    r|   r*  c                   @   r   )z$TestNumericalInversePolynomial.dist3c                 C   s$   ddddt  dt j | ¡    S )NrL   rž  rŸ  rP   rQ   r   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=
·?rQ   r8   r¢  r!   r$   r$   r%   r*     s   $ÿz(TestNumericalInversePolynomial.dist3.cdfc                 C   rH   )N)éûÿÿÿr›   r$   r  r$   r$   r%   r«      rz   z,TestNumericalInversePolynomial.dist3.supportNr�  r$   r$   r$   r%   Údist3  s    r¥  rK   r,  r  gÍÌÌÌÌÌÜ¿çUUUUUUÕ?gìQ¸…ëÉ?rQ   g«ªªªªª @r-  c                 C   s   t |dd�}t|||ƒ d S r.  )r	   r¨   ©r"   r0   r½   rq   r$   r$   r%   r2  ,  s   z)TestNumericalInversePolynomial.test_basicrn  c           	      C   sÊ   g d¢}g d¢}dg}||v rt  d|› �¡ ||v r#t  d|› �¡ t|tƒr-tt|ƒn|}||Ž }tƒ �}| t¡ t	|dd�}W d   ƒ n1 sLw   Y  ||v rWd S t
||| ¡ | ¡ gƒ d S )N)ÚanglitÚ
gausshyperÚkappa4ÚksoneÚkstwoÚlevy_lÚlevy_stableÚstudentized_rangeÚ	trapezoidÚtriangÚvonmises)	Úchi2ÚfatiguelifeÚgibratÚhalfgennormÚlognormÚncfÚncx2ÚparetoÚtÚrel_breitwignerzPINV too slow for zPINV fails for r/  ro   )rX   rq  rr  rs  rV   r   r   r0  rÌ   r	   r¨   r¸   r¹   )	r"   ru  rv  Úvery_slow_distsÚ
fail_distsÚskip_sample_moment_checkr0   r1  rq   r$   r$   r%   Útest_basic_all_scipy_dists2  s&   ÿþ
þz9TestNumericalInversePolynomial.test_basic_all_scipy_distsr4  c                 C   óX   G dd„ dƒ}||_ tj||d�� t|ddgd� W d   ƒ d S 1 s%w   Y  d S )Nc                   @   r5  )z9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNr6  r$   r$   r$   r%   r0   V  r7  r0   rS   r   r›   rÊ   )r&   rX   r   r	   r9  r$   r$   r%   r:  T  ó
   "ÿz+TestNumericalInversePolynomial.test_bad_pdfzlogpdf, err, msgc                 C   rÁ  )Nc                   @   r5  )z<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNr6  r$   r$   r$   r%   r0   ^  r7  r0   rS   r   r›   rÊ   )ÚlogpdfrX   r   r	   )r"   rÃ  rY   rZ   r0   r$   r$   r%   Útest_bad_logpdf\  rÂ  z.TestNumericalInversePolynomial.test_bad_logpdfrR   c                 C   r=  r>  )rX   r   r	   r   r?  r$   r$   r%   r@  f  rA  z3TestNumericalInversePolynomial.test_inf_nan_domainsr   rP   é'  rŸ   r!  r´   rL   rM   rN  r°   c                 C   ó¢   t ƒ }t|dd�}tƒ �+}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 s:w   Y  t||ddd� |j	|j	ksOJ ‚d S ©	Nç›+¡†›„=©Úu_resolutionrP  rQ  rR  rS  g•dyáý¥=rµ   )
r   r	   r   r0  rÌ   r©   r   r¥   r   r�   ©r"   r°   r0   rq   r1  rV  rW  r$   r$   r%   Útest_ppfz  ó   
ø	z'TestNumericalInversePolynomial.test_ppfrG  r8   r7   rš   r#   c                 C   rÆ  rÇ  )
r   r	   r   r0  rÌ   r*   r   r¥   r   r�   )r"   r#   r0   rq   r1  rV  rW  r$   r$   r%   Útest_cdf�  rÍ  z'TestNumericalInversePolynomial.test_cdfc                 C   sj   t ƒ }t|dd�}| ¡ \}}|dk sJ ‚||ksJ ‚t|dd�}| ¡ \}}|dk s-J ‚||ks3J ‚d S ©Ng»½×Ùß|Û=rÉ  rÈ  )r   r	   Úu_error)r"   r0   rq   Ú	max_errorÚmaer$   r$   r%   Útest_u_error¢  s   z+TestNumericalInversePolynomial.test_u_errorg      @é   g#B’¡œÇ;Úorderc                 C   sJ   t ƒ }d}tjt|d�� t||d� W d   ƒ d S 1 sw   Y  d S )Nz2`order` must be an integer in the range \[3, 17\].rS   ©rÕ  )r   rX   r   rx   r	   )r"   rÕ  r0   rZ   r$   r$   r%   Útest_bad_orders±  s
   "ÿz.TestNumericalInversePolynomial.test_bad_ordersrÊ  c                 C   sF   d}t jt|d�� ttƒ |d� W d   ƒ d S 1 sw   Y  d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rS   rÉ  )rX   r   rx   r	   r   )r"   rÊ  rZ   r$   r$   r%   Útest_bad_u_resolution¹  s   ÿ"ÿz4TestNumericalInversePolynomial.test_bad_u_resolutionc                 C   sô   G dd„ dƒ}|ƒ }d}t jt|d�� t|ƒ}W d   ƒ n1 s"w   Y  tƒ }t|ƒ}d}t jt|d�� | d¡ W d   ƒ n1 sGw   Y  G dd„ dƒ}|ƒ }t|ƒ}d	}t jt|d�� | ¡  W d   ƒ d S 1 ssw   Y  d S )
Nc                   @   rZ  )z=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 S   s   t j |¡S r(   r  r!   r$   r$   r%   r*   Ã  r  zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdfN)r-   r.   r/   r*   r$   r$   r$   r%   ÚBadDistÂ  r]  rÙ  z9Either of the methods `pdf` or `logpdf` must be specifiedrS   z4`sample_size` must be greater than or equal to 1000.r8   c                   @   rZ  )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%   r{   Ñ  r]  r{   z!Exact CDF required but not found.)rX   r   rx   r	   r   rÐ  )r"   rÙ  r0   rZ   rq   r{   r$   r$   r%   r“  À  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                   @   r5  )zJTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNr6  r$   r$   r$   r%   ÚMyDistß  r7  rÛ  c                 S   s   t  |  |  d ¡S ©NrQ   )Úmathr    r:   r$   r$   r%   r;   ä  s    zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>c                 S   s   |  |  d S rÜ  r$   r:   r$   r$   r%   r;   é  s    rT  gwJëÿï?ra   rŸ   )r&   r	   rÃ  r   r§   r   r©   )r"   rÛ  Údist_pdfrh   Údist_logpdfri   Úqr$   r$   r%   Útest_logpdf_pdf_consistencyÛ  s   

z:TestNumericalInversePolynomial.test_logpdf_pdf_consistencyN),r-   r.   r/   r  r  r*  r¥  r_  r`  ra  r   r   rb  rc  rd  rX   rÿ   r   re  r2  Úxslowr   rÀ  rg  r:  Úbad_logpdfs_commonrÄ  ri  r@  r§   rG   rE   r°   rÌ  r#   rÎ  ÚslowrÓ  Ú
bad_ordersÚbad_u_resolutionr×  rØ  r“  rá  r$   r$   r$   r%   rœ  î  s`    ÿ
 

	
ô
"þ



rœ  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¡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(ejj)d8d9„ ƒZ*d S ):ÚTestNumericalInverseHermitec                   @   r  )
z!TestNumericalInverseHermite.dist0c                 C   s   ddt  dt j | ¡  S )Nr!  r   r   r   r!   r$   r$   r%   r&   ö  s   z%TestNumericalInverseHermite.dist0.pdfc                 C   s   t jt  dt j | ¡ S )Nr   r¢  r!   r$   r$   r%   r'   ù  r  z&TestNumericalInverseHermite.dist0.dpdfc                 C   s4   ddt j d|   t  dt j | ¡ dt j  S )Nr   r   rP   ry  r¢  r!   r$   r$   r%   r*   ü  s   4z%TestNumericalInverseHermite.dist0.cdfc                 C   rH   r  r$   r  r$   r$   r%   r«   ÿ  rz   z)TestNumericalInverseHermite.dist0.supportNr  r$   r$   r$   r%   r  õ  r  r  c                   @   r  )
z!TestNumericalInverseHermite.dist1c                 C   s\   |dkrt  dt j | ¡d t j S |dk rdS |dkr,t  dt j | ¡d t j S d S )Nr   r   r!  rK   r   r!   r$   r$   r%   r&     s   ÿz%TestNumericalInverseHermite.dist1.pdfc                 C   s`   |dkrt  dt j | ¡t j t j S |dk rdS |dkr.t  dt j | ¡t j t j S d S )Nr   r   rK   r!  ©r   r£  r   r!   r$   r$   r%   r'     s     ÿz&TestNumericalInverseHermite.dist1.dpdfc                 C   sX   |dkrddt  dt j | ¡  S |dk rdS |dkr*ddt  dt j | ¡  S d S )Nr   ç      Ð?rP   r   rK   r!  r  rè  r!   r$   r$   r%   r*     s   ÿz%TestNumericalInverseHermite.dist1.cdfc                 C   rH   )N)r  r!  r$   r  r$   r$   r%   r«     rz   z)TestNumericalInverseHermite.dist1.supportNr  r$   r$   r$   r%   r    s
    r  r  rQ   r¦  rP   rš   g      Ð¿g      Ø?g      °?r-  rÕ  r7   r›   c                 C   s   t ||dd�}t|||ƒ d S )Nr/  )rÕ  r`   )r
   r¨   )r"   r0   r½   rÕ  rq   r$   r$   r%   r2  )  s   z&TestNumericalInverseHermite.test_basicrR   c                 C   r=  r>  )rX   r   r
   r   r?  r$   r$   r%   r@  2  rA  z0TestNumericalInverseHermite.test_inf_nan_domainsc           
   	   C   sÎ   h d£}h d£}||v rt  d¡ ||v rt  d¡ tj d¡ tt|ƒ|Ž }t|ƒ}tj 	d¡}t 
t | |¡| |¡ ¡t | |¡¡ ¡}t 
t | | |¡¡| ¡¡}	|dk s_J ‚|	dk seJ ‚d S )	N>   r«  r¬  Úskewnormr®  >   r¸  ÚnctÚbetaÚwaldrª  Úinvgaussr²  r©  ÚgeninvgaussÚnorminvgaussÚgenhyperbolicr¯  zDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r8   ç:Œ0âŽyE>rã   )rX   rq  rè   r   rc   rd   rV   r   r
   ÚrandÚmaxr#  r©   r*   )
r"   ru  ÚshapesÚ
slow_distsr¾  r0   Úfnir#   Úp_tolÚu_tolr$   r$   r%   Úbasic_test_all_scipy_dists7  s   

0 z6TestNumericalInverseHermite.basic_test_all_scipy_distszignore::RuntimeWarning)ru  rõ  c                 C   s   |   ||¡ d S r(   ©rú  )r"   ru  rõ  r$   r$   r%   rÀ  P  s   z6TestNumericalInverseHermite.test_basic_all_scipy_distsc                 C   s   |   dd¡ d S )NÚ	truncnorm)r´   rQ   rû  r  r$   r$   r%   Útest_basic_truncnorm_gh17155X  s   z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155c                 C   sÀ   d}t jt|d�� ttƒ dd� W d   ƒ n1 sw   Y  d}t jt|d�� tdƒ W d   ƒ n1 s8w   Y  d}t jt|d�� ttƒ dd	� W d   ƒ d S 1 sYw   Y  d S )
Nz"`order` must be either 1, 3, or 5.rS   rQ   rÖ  z`cdf` required but not foundr¥   z!could not convert string to floatÚekkirÉ  )rX   r   rx   r
   r   )r"   rT   r$   r$   r%   rØ   ]  s   ÿ
ÿÿ"ÿz1TestNumericalInverseHermite.test_input_validationNr   )é   )rÿ  )©rš   r›   é   r   rq   rß   c           
      C   st   t ƒ }t|ƒ}t|ƒ}|j||d�}|d ur|j|ksJ ‚|d ur8t|ƒ}|j|d�}tj 	|¡}	t
||	ƒ d S d S )N)r™   r`   ©r™   )r   r
   r   rb   r�   r   rò   r   r¥   r©   r   )
r"   rq   rë   rì   r0   r÷  ri   rb   rò   rk   r$   r$   r%   Útest_RVSo  s   üz$TestNumericalInverseHermite.test_RVSc                 C   sZ   d}d}t jt|d�� ttj|Ž ƒ W d   ƒ n1 sw   Y  ttj|Ž dd� d S )N)g�µds’z@g@ø¯eä?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrS   rò  rÉ  )rX   rË   rÌ   r
   r   rì  )r"   rõ  rT   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   ro   )r   r
   r   r¥   r   rb   )r"   r  Úfni1r*  Úfni2r$   r$   r%   Útest_custom_distributionŽ  s
   z4TestNumericalInverseHermite.test_custom_distributionrK   r   rÅ  rŸ   r!  r´   rL   rM   rN  r°   c                 C   s¢   t ƒ }t|dd�}tƒ �+}| td¡ | td¡ | td¡ | td¡ | |¡}tj |¡}W d   ƒ n1 s:w   Y  t||ddd	� |j	|j	ksOJ ‚d S )
Nrã   rÉ  rP  rQ  rR  rS  g•Ö&è.>gLÎaã§�ô=rµ   )
r   r
   r   r0  rÌ   r©   r   r¥   r   r�   rË  r$   r$   r%   rÌ  ¦  rÍ  z$TestNumericalInverseHermite.test_ppfc                 C   sš   t ƒ }t|dd�}| ¡ \}}|dk sJ ‚||ksJ ‚tƒ �}| t¡ t|dd�}W d   ƒ n1 s4w   Y  | ¡ \}}|dk sEJ ‚||ksKJ ‚d S rÏ  )r   r
   rÐ  r   r0  rÌ   )r"   r0   rq   rÑ  rÒ  r1  r$   r$   r%   rÓ  ¸  s   
ýz(TestNumericalInverseHermite.test_u_error)+r-   r.   r/   r  r  r_  r   r   r`  ra  rd  rX   rÿ   r   re  r2  ri  r@  rú  Úfilterwarningsrâ  r   rÀ  Ú	fail_slowrý  rØ   rc   re   ÚrngsÚappendr¦   rü   rý   r  r  r  r§   rG   rE   r°   rÌ  rä  rÓ  r$   r$   r$   r%   rç  ð  sR    & ÿ



ô
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>   rk  rl  rm  c                 C   óP   g d¢}t j ¡ }t t¡� t||dd� W d   ƒ d S 1 s!w   Y  d S )N©r´   g333333Ó?g333333ã?r6   ©r`   Úguide_factor©r   rc   r¦   rX   rË   rÌ   r   ©r"   r±   r¯   r$   r$   r%   Ú$test_guide_factor_gt3_raises_warningÏ  ó
   
"ÿz;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warningc                 C   r  )Nr  r   r  r  r  r$   r$   r%   Ú%test_guide_factor_zero_raises_warningÕ  r  z<TestDiscreteGuideTable.test_guide_factor_zero_raises_warningc                 C   r  )Nr  r  r  r  r  r$   r$   r%   Ú)test_negative_guide_factor_raises_warningÛ  s
   
"ÿz@TestDiscreteGuideTable.test_negative_guide_factor_raises_warningrn  c           
      C   ro  )NzYDGT fails on these probably because of large domains and small computation errors in PMF.rP   r   z$DGT only works with a finite domain.r¾   r/  ro   )rp  rX   rq  rr  rs  rV   r   r«   r   rº   r­   r¬   r   r®   rt  r$   r$   r%   r2  ä  s   






z!TestDiscreteGuideTable.test_basicr   rP   rÅ  rŸ   r!  r´   rL   rM   rN  r°   c           	      C   s¬   d\}}t  ||¡}t|dd�}tƒ �-}| td¡ | td¡ | td¡ | td¡ | |¡}t j |||¡}W d   ƒ n1 sCw   Y  t|j|jƒ t||ƒ d S )N)rš   r´   r/  ro   rP  rQ  rR  rS  )	r   rª   r   r   r0  rÌ   r©   r   r�   )	r"   r°   ÚnÚpr0   rq   r1  rV  rW  r$   r$   r%   rÌ    s   
÷
zTestDiscreteGuideTable.test_ppfr…  c                 C   r†  r‡  )rX   r   rx   r   r‰  r$   r$   r%   rŠ  !  r‹  z"TestDiscreteGuideTable.test_bad_pvrU   c                 C   rŒ  r�  )rX   r   rx   r   r   rª   rŽ  r$   r$   r%   r�  +  r�  z&TestDiscreteGuideTable.test_inf_domainN)r-   r.   r/   rp  r  r  r  rX   rÿ   r   r   r2  r   r§   rG   rE   r°   rÌ  rš  rŠ  r›  r�  r$   r$   r$   r%   r  È  s,    	
õ

$ÿr  c                   @   s€   e Zd ZG dd„ dƒZedƒedƒgZdejgZdejgZeegZ	e
j deee	ƒ¡dd„ ƒZe
j de¡d	d
„ ƒZdd„ ZdS )ÚTestSimpleRatioUniformsc                   @   r   )zTestSimpleRatioUniforms.distc                 C   s   || _ || _d S r(   )r  r4   r  r$   r$   r%   rw   6  s   
z%TestSimpleRatioUniforms.dist.__init__c                 C   r  r   r"  r$  r$   r$   r%   r&   :  r&  z TestSimpleRatioUniforms.dist.pdfc                 C   r'  r(  r  r!   r$   r$   r%   r*   ?  r)  z TestSimpleRatioUniforms.dist.cdfN)r-   r.   r/   rw   r&   r*   r$   r$   r$   r%   r0   5  s    r0   rK   r+  r-  c                 C   sF   t ||jdd�}t|||ƒ t ||j| |j¡dd�}t|||ƒ d S )Nr/  )r4   r`   )r4   Úcdf_at_moder`   )r   r4   r¨   r*   r§  r$   r$   r%   r2  M  s   
þz"TestSimpleRatioUniforms.test_basicrR   c                 C   r=  r>  )rX   r   r   r   r?  r$   r$   r%   r@  Y  rA  z,TestSimpleRatioUniforms.test_inf_nan_domainsc                 C   sD   t jtdd�� ttƒ ddd� W d   ƒ d S 1 sw   Y  d S )Nz`pdf_area` must be > 0rS   r   r  )r4   Úpdf_area)rX   r   rx   r   r   r  r$   r$   r%   r“  ^  s   "ÿz%TestSimpleRatioUniforms.test_bad_argsN)r-   r.   r/   r0   r_  r   rE   ra  rb  rd  rX   rÿ   r   re  r2  ri  r@  r“  r$   r$   r$   r%   r  1  s    

ÿ


r  c                   @   r  )
ÚTestRatioUniformsc                 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 )NrQ   r   i90  ©ÚumaxÚvminÚvmaxr`   iÄ	  r¥   rP   ré  Tc                 S   s   t  |  ¡S r(   rÚ  r:   r$   r$   r%   r;   o  r[  z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>r  rM  Úexpon)
r   r¥   r&   r   r   r   r   Úkstestrb   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 )NrQ   r   éÒ  r  r7   rÝ   )r7   rP   r   )r7   r7   r7   r  é   rP   rÚ   )
r   r¥   r&   r   r   r   rb   r   Úflattenr�   )r"   r#  r$  r°   Úgen1Úgen2Úgen3Úr1Úr2Úr3Úgen4Úgen5Úr4Úr5Úgen6Úgen7Úgen8Úr6Ú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 )NrQ   r   r&  r  r8   )r  r  r   )
r   r¥   r&   r   r   r   rb   rc   rd   r   )r"   r#  r$  r  r)  r,  r*  r-  r$   r$   r%   rn   �  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w   Y  ttdd�� t|dddd� W d   ƒ n1 s;w   Y  ttdd�� t|dddd� W d   ƒ n1 sYw   Y  ttdd�� t|dddd� W d   ƒ d S 1 sxw   Y  d S )	Nzvmin must be smaller than vmaxrS   rP   r7   )r&   r  r  r   zumax must be positiver  r   )r   r¥   r&   Úassert_raisesrx   r   )r"   r#  r$   r$   r%   Útest_exceptionsš  s   ÿÿÿ"ÿz!TestRatioUniforms.test_exceptionsN)r-   r.   r/   r%  r9  rn   r;  r$   r$   r$   r%   r  d  s
    r  )r³   r´   )rÀ   r´   )Lr�   r”   rX   Úcopyr   ræ   rå   rÝ  Únumpyr   Únumpy.testingr   r   r   Úscipy.stats.samplingr   r   r   r	   r
   r   r   r   r   r:  Úscipyr   r   Úscipy.statsr   r   Úscipy.stats._distr_paramsr   r   Úscipy._lib._utilr   r   Úall_methodsÚimplementationÚnameÚversionÚfloaterrr˜  r—  rg  rh  rã  rG   rE   rš  rx   Úbad_sized_domainsÚbad_domainsri  Únan_domainsrÿ   r   r^   rn   rr   r“   r˜   rž   r²   r¨   r®   rÍ   rÎ   rÏ   r  rj  rœ  rç  r  r  r  r$   r$   r$   r%   Ú<module>   sÒ    (
ú	ôöö
ûü	þøþÿÿ
1






ÿ[ ?u   Yi3