o
    i?>                     @   s  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 d dlmZ dd Zdd	 Zg d
Ze jdedd Ze jdedd Ze jje jjdddd Ze jde jddgdd Zdd Zdd Zdd Ze jddd d!ej ejffgd"d# Ze jdd$d%gd&d' Zd(d) Z d*d+ Z!d,d- Z"e jd.g d/d0d1 Z#d2d3 Z$d4d5 Z%d6d7 Z&e j'd8G d9d: d:Z(d;d< Z)dS )=    N)assert_array_equalassert_allclosesuppress_warnings)deepcopy)FastGeneratorInversion)statsc                  C   s|  t jtdd ttjdd W d    n1 sw   Y  t jtdd ttjddgd W d    n1 s;w   Y  t jtd	d tt d
d W d    n1 sZw   Y  d} t jt| d ttddg W d    n1 s|w   Y  t jtdd td W d    n1 sw   Y  t jtdd ttdd W d    d S 1 sw   Y  d S )Nzloc must be scalarmatch)333333??)loczscale must be scalar      ?@)scalez'test' cannot be used to seedtestrandom_statez/Each of the 1 shape parameters must be a scalarr         @z`dist` must be a frozenZxyzDistribution 'truncnorm' is not      @)pytestraises
ValueErrorr   r   normgamma	truncnorm)msg r   c/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_fast_gen_inversion.pytest_bad_args   s&   
"r   c                  C   s,  t t dd} | jdd}d| _| jdd}t|| tjd}t t |d} | jdd}tjd| _| jdd}t|| tj	d}t t |d} | jdd}tj	d| _| jdd}t|| t t dd} | jdd}| j
dd}| jdd}d| _| jdd}t||dd   d S )	Ni-r   
   sizei16i<	        )r   r   r   rvsr   r   nprandomdefault_rngZRandomStateevaluate_error)genx1Zx2urng_Zx3r   r   r   test_random_state    s0   


r-   )#)alpha      @)Zanglitr   )argusr/   )r1   )gffffff@)beta)r   ?)Zcosiner   )Z	betaprime)r   gffffff
@)Zbradfordr
   )burr)r   333333@)Zburr12ffffff?r
   )Zcauchyr   )Zchi2r/   )chi)r   )Zcrystalballr7   )Zexponr   )r   r   )Zgennorm)g@)Zgumbel_lr   )Zgumbel_rr   )Z	hypsecantr   )Zinvgauss)g@)Z
invweibullr:   )Zlaplacer   )Zlogisticr   )Zmaxwellr   )Zmoyalr   r   r   )Zpareto)r   )Zpowerlaw)gffffff@)Zrayleighr   )Zsemicircularr   )t)r   )Zwaldr   )Zweibull_max)r6   )Zweibull_minr4   zdistname, argsc                 C   s|   t jd}tt| | }|jd|d}t||d}|jdd}t||jdks+J g d}t	|
||
|dd	 d S )
N   IOi^  r!   r   r   r    {Gz?gMbP?g?      ?r3   g+?绽|=Zatol)r%   r&   r'   getattrr   r$   r   cramervonmises_2samppvaluer   ppf)distnameargsr+   Zrng1Zrvs1Zrng2Zrvs2qr   r   r   test_rvs_and_ppfj   s   rL   c                 C   sj   t t| | }t }|t t|}W d    n1 sw   Y  |jdddd\}}|dks3J d S )N'  r=   Fr!   r   x_errorrC   )rE   r   r   filterRuntimeWarningr   r(   )rI   rJ   distsuprngu_errorrO   r   r   r   test_u_errory   s   


rV   zgeninvgauss CDF is not accurate)reasonc                  C   s6   t dd} t| }|jddd}|d dk sJ d S )N皙	@r   rM   i	 r?   r   rC   )r   Zgeninvgaussr   r(   )rR   rT   errr   r   r   test_geninvgauss_uerror   s   rZ   r"   )r2   ))\(?r[   c                 C   sv   t  }|t tt| | }t|}W d    n1 sw   Y  |jdddd\}}|dkr7|dk s9J d S d S )NrM   l   c}u -SRTrN   g&.=g&.>)r   rP   rQ   rE   r   r   r(   )rI   rJ   rS   rR   rT   rU   rO   r   r   r   test_error_extreme_params   s   


r\   c                  C   s   t t } tjtdd | jdd W d    n1 sw   Y  tjtdd | jdd W d    d S 1 s<w   Y  d S )Nzsize must be an integerr   r0   r    )   r]   )r   r   r   r   r   r   r(   )r)   r   r   r   test_evaluate_error_inputs   s   "r^   c                  C   sv   d\} }t j| |d}t|dd}|jdd}||  | }t |djdks(J g d	}t||||d
d d S )N)r0   ffffff@r   r   i  r     r    r   r@   rA   rC   rD   )	r   r   r   r$   cramervonmisesrG   r   _ppfrH   )r   r   rR   rT   rZ
r_rescaledrK   r   r   r   test_rvs_ppf_loc_scale   s   re   c                  C   s   t t dd} | jdd}d|   kr"|   k r"dks%J  J d\}}tj||d}t |d	d} | jdd}||d
  ||d  }}||   kr]|   k r]|ks`J  J d S )N)   domaind   r    rf   rg   )r0   r   r`   )g         r   rk   )r   r   r   r$   minmax)rT   rd   r   r   rR   lbubr   r   r   test_domain   s   .2rp   zdistname, args, expected)r2   r0   r   r   rg   r   r   c                 C   sP   t t| | }t|}t| | d|_d|_t| ddt|   d S )Nrg   rk   )	rE   r   r   r   supportr   r   r%   array)rI   rJ   expectedrR   rT   r   r   r   test_support   s    rv   )r2   rq   r;   c                 C   sF   t t| | }t|dd}t| d d|_d|_t| d d S )N)rB   r8   rh   rg   rk   )       @r6   )rE   r   r   r   rs   r   r   )rI   rJ   rR   rT   r   r   r   test_support_truncation   s   rx   c                  C   s   t   t d tt dd} W d    n1 sw   Y  | jdd}d|   kr;|   k r;dks>J  J d S )Nerror)rg   rk   rh   rj   r    rg   rk   )	warningscatch_warningssimplefilterr   r   r   r$   rl   rm   )rT   rd   r   r   r   test_domain_shift_truncation   s   

2r}   c                  C   s>  t t dd} tdd}d}d}t| ||| t| ||| d\}}d| _	d	| _
tjdd||d
}t|| | }t| ||| t| ||| t tdddd} d| _	d| _
t|  d tg d}| |}t|d |d	 fd t|dd	 dksJ t| |d d S )N)r_   rX   rh   r_   rX   )rw   r6         @g333333@r@   rB   gGz?)rk   r]   rk   r]   r`   r   r0   )g333333?r8   )      @      @)gQ@Gz@Q@gGz@r   rr   rg   )r   r   r   r   )r   r   r   r   r   _cdfcdfrc   rH   r   r   r%   rt   r2   r   rs   rl   )rT   Z
trunc_normxpr   r   Zy_cdfr   r   r    test_non_rvs_methods_with_domain   s,   
r   c                  C   s   t  } t| }tjdddd}d}t||| | t||| 	| d\}}||_
||_t j||d} t||| | t||| 	| d S )Nr]   r   )numr   )rB   r   r`   )r   r   r   r%   Zlinspacer   r   r   rc   rH   r   r   )Z	norm_distrT   r   r   r   r   r   r   r   #test_non_rvs_methods_without_domain  s   r   z	domain, x))NrB   )rr   rB   )rr   r   c                 C   s<   t t | d}t||sJ t|dsJ dS )z pdf, cdf etc should map scalar values to scalars. check with and
    w/o domain since domain impacts pdf, cdf etc
    Take x inside and outside of domain rh   rB   N)r   r   r   r%   Zisscalarr   rc   )ri   r   rT   r   r   r   test_scalar_inputs  s   r   c                     s   d\} }}t t| ||fd}d|_|jdd}||   kr-|   k r-|ks0J  J t| j  | | t| fddj	dksNJ d S )	N)g      @g      ?g      ?rh   i  r>   r    c                    s    |  S )Nr   )r   r   Zprobr   r   <lambda>4  s    z-test_domain_argus_large_chi.<locals>.<lambda>皙?)
r   r   r1   r   r$   rl   rm   r   rb   rG   )r9   rn   ro   rT   rd   r   r   r   test_domain_argus_large_chi)  s   
.$r   c                  C   s   t t dd} | jdd}d| _d| _| d}t||d d jdks(J d	| _d
| _| d}t||jdks>J d S )Ni訤-r   ra   r    r~   r   r]   r   r   rg   )r   r   r   r$   r   r   rF   rG   )rT   r1r2r   r   r   test_setting_loc_scale7  s   

r   c                  C   st   d} t jt| d ttd}W d    n1 sw   Y  ttddd}|jddd\}}|d	ks8J d S )
Nz0No generator is defined for the shape parametersr   gQ?T)Zignore_shape_rangera      r?   gư>)r   r   r   r   r   r<   r(   )r   rT   Zu_errr,   r   r   r   test_ignore_shape_rangeF  s   r   z4NumericalInversePolynomial.qrvs fails for Win 32-bitc                   @   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   t t }d}tjt|d |jdd W d    n1 s w   Y  d}tjt|d |jdtjdd W d    d S 1 sEw   Y  d S )	Nz&`qmc_engine` must be an instance of...r   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r]   rk   dr   )	r   r   r   r   r   r   qrvsqmcHalton)selfr)   r	   r   r   r   test_input_validationT  s   "zTestQRVS.test_input_validationNrg   r   seedr]   )rg   )rg   )   r   )r   r   )rk   r   r   )r]   )r]   qrngzsize_in, size_outzd_in, d_outc                 C   s
  t t }|d ur7|d ur7|j|kr7d}tjt|d |j|||d W d    d S 1 s0w   Y  d S |d u rH|d urH|jdkrH|jf}|| }t|}	|j|||d}
|d urc|
j	|kscJ |	d ur|	
t|pod}tj||}t|
|dd d S d S )Nr   r   r   rg   r!   r   r   -q=rD   )r   r   r   r   r   r   r   r   r   shaper&   r%   prodrH   reshaper   )r   r   Zsize_inZsize_outZd_inZd_outr)   r	   Zshape_expectedqrng2r   uniformqrvs2r   r   r   test_QRVS_shape_consistencyk  s*   
z$TestQRVS.test_QRVS_shape_consistencyc                 C   s   t t }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 q4d S )	N)r]   r   r"   r   r   r   .r   rD   )r   r   r   r   r   r&   r%   r   r   rH   ranger   r   )r   r)   r!   r   r   r   r   r   r   isampleZsample2r   r   r   test_QRVS_size_tuple  s   zTestQRVS.test_QRVS_size_tuple)__name__
__module____qualname__r   r   r   ZSobolr   ZqrngstuplesizesZdsr   markparametrizer   r   r   r   r   r   r   P  s    "r   c                  C   sb   d} t  }|t ttj|  }W d    n1 sw   Y  |jdd\}}|dks/J d S )N)gA;B?gעG-S?i  r   rC   )r   rP   rQ   r   r   r5   r(   )rJ   rS   r)   rU   r,   r   r   r   test_burr_overflow  s   
r   )*r   rz   numpyr%   Znumpy.testingr   r   r   copyr   Zscipy.stats.samplingr   Zscipyr   r   r-   Zdists_with_paramsr   r   rL   rV   ZxslowZxfailrZ   Z	fail_slowr\   r^   re   rp   infrv   rx   r}   r   r   r   r   r   r   Zxfail_on_32bitr   r   r   r   r   r   <module>   s`    #'





"
	
S