o
    h?>                     @   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 frozenxyzDistribution 'truncnorm' is not      @)pytestraises
ValueErrorr   r   normgamma	truncnorm)msg r   ]/var/www/vscode/kcb/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_rngRandomStateevaluate_error)genx1x2urng_x3r   r   r   test_random_state    s0   


r1   )#)alpha      @)anglitr   )argusr3   )r6   )gffffff@)beta)r   ?)cosiner   )	betaprime)r   gffffff
@)bradfordr
   )burr)r   333333@)burr12ffffff?r
   )cauchyr   )chi2r3   )chi)r   )crystalballr@   )exponr   )r   r   )gennorm)g@)gumbel_lr   )gumbel_rr   )	hypsecantr   )invgauss)g@)
invweibullrG   )laplacer   )logisticr   )maxwellr   )moyalr   r   r   )pareto)r   )powerlaw)gffffff@)rayleighr   )semicircularr   )t)r   )waldr   )weibull_max)r>   )weibull_minr<   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?      ?r8   g+?绽|=atol)r&   r'   r(   getattrr   r%   r   cramervonmises_2samppvaluer   ppf)distnameargsr.   rng1rvs1rng2rvs2qr   r   r   test_rvs_and_ppfj   s   ro   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_errorra   )rd   r   r   filterRuntimeWarningr   r*   )rh   ri   distsuprngu_errorrr   r   r   r   test_u_errory   s   


ry   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   rp   i	 r]   r   ra   )r   geninvgaussr   r*   )ru   rw   errr   r   r   test_geninvgauss_uerror   s   r~   r#   )r7   ))\(?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 )Nrp   l   c}u -SRTrq   g&.=g&.>)r   rs   rt   rd   r   r   r*   )rh   ri   rv   ru   rw   rx   rr   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   r4   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)r4   ffffff@r   r   i  r     r!   r   r^   r_   ra   rb   )	r   r   r   r%   cramervonmisesrf   r   _ppfrg   )r   r   ru   rw   r
r_rescaledrn   r   r   r   test_rvs_ppf_loc_scale   s   r   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!   r   r   )r4   r   r   )g         r   r   )r   r   r   r%   minmax)rw   r   r   r   ru   lbubr   r   r   test_domain   s   .2r   zdistname, args, expected)r7   r4   r   r   r   r   r   c                 C   sP   t t| | }t|}t| | d|_d|_t| ddt|   d S )Nr   r   )	rd   r   r   r   supportr   r   r&   array)rh   ri   expectedru   rw   r   r   r   test_support   s    r   )r7   r   rR   c                 C   sF   t t| | }t|dd}t| d d|_d|_t| d d S )N)r`   rA   r   r   r   )       @r>   )rd   r   r   r   r   r   r   )rh   ri   ru   rw   r   r   r   test_support_truncation   s   r   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)r   r   r   r   r!   r   r   )	warningscatch_warningssimplefilterr   r   r   r%   r   r   )rw   r   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   r{   r   r   r{   )r   r>         @g333333@r^   r`   gGz?)r   r   r   r   r   r   r4   )g333333?rA   )      @      @)gQ@Gz@Q@gGz@r   r   r   )r   r   r   r   )r   r   r   r   r   _cdfcdfr   rg   r   r   r&   r   r7   r   r   r   )rw   
trunc_normxpr   r   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   )r`   r   r   )r   r   r   r&   linspacer   r   r   r   rg   r   r   )	norm_distrw   r   r   r   r   r   r   r   #test_non_rvs_methods_without_domain  s   r   z	domain, x))Nr`   )r   r`   )r   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 r   r`   N)r   r   r   r&   isscalarr   r   )r   r   rw   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      ?r   i  r\   r!   c                    s    |  S )Nr   )r   r   probr   r   <lambda>4  s    z-test_domain_argus_large_chi.<locals>.<lambda>皙?)
r   r   r6   r   r%   r   r   r   r   rf   )rD   r   r   rw   r   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   r   r!   r   r   r   r   r   r   )r   r   r   r%   r   r   re   rf   )rw   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)ignore_shape_ranger      r]   gư>)r   r   r   r   r   rW   r*   )r   rw   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   r   dr   )	r   r   r   r   r   r   qrvsqmcHalton)selfr+   r	   r   r   r   test_input_validationT  s   "zTestQRVS.test_input_validationNr   r   seedr   )r   )r   )   r   )r   r   )r   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   r   r"   r   r   -q=rb   )r   r   r   r   r   r   r   r   r   shaper'   r&   prodrg   reshaper   )r   r   size_insize_outd_ind_outr+   r	   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   rb   )r   r   r   r   r   r'   r&   r   r   rg   ranger   r   )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)__name__
__module____qualname__r   r   r   Sobolr   qrngstuplesizes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   ra   )r   rs   rt   r   r   r=   r*   )ri   rv   r+   rx   r/   r   r   r   test_burr_overflow  s   
r   )*r   r   numpyr&   numpy.testingr   r   r   copyr   scipy.stats.samplingr   scipyr   r   r1   dists_with_paramsr   r   ro   ry   xslowxfailr~   	fail_slowr   r   r   r   infr   r   r   r   r   r   r   r   r   xfail_on_32bitr   r   r   r   r   r   <module>   s`    #'





"
	
S