o
    i                     @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl	m
Z
 d dlmZ ddlmZ d dlmZ d dlmZ d d	lmZ g d
ZdZdZg dZg dZg dZg dZg dZdgZee edZeedZdhZ g dZ!dd Z"ej#j$ej#%de" ej#%dddgdd Z&d?ddZ'd d! Z(d"d# Z)d$d% Z*ej#%d&e
j+d'fe
j,d(fgd)d* Z-d+d, Z.d-d. Z/d/d0 Z0ej#%d1e0 d2d3 Z1	 	5d@d6d7Z2G d8d9 d9Z3g d:Z4G d;d< d<Z5G d=d> d>Z6dS )A    N)assert_allcloseassert_equal)statsdifferential_evolution   )distcont)FitError)distdiscrete)goodness_of_fit)    i'        ?      ?)dpareto_lognorm
gausshypergenexpongengamma	irwinhallkappa4ksonekstwoncfncx2
truncexpontukeylambdavonmiseslevy_stable	trapezoidtruncweibull_minstudentized_range)		betaprimecrystalball	exponweibfgeninvgauss	jf_skew_trecipinvgaussrel_breitwignervonmises_line)burrchichi2mielkepearson3genhalflogisticrdistparetopowerlawpowerlognorm
wrapcauchyr(   )4alphar!   r*   burr12Zcauchyr+   r,   r"   dgammar   dweibullr$   fatiguelifefisk
foldcauchy
genextremer   genhyperbolicgennorm	genparetoZ
halfcauchyinvgamma
invweibullr   r&   	johnsonsukappa3r   r   ZlandauZlevyZlevy_lr   
loglaplacelomaxr-   nakagamir   nctr   r1   r3   	powernormr(   Z
skewcauchytr   triangtruncparetor   r   r    )argusexponpowr#   r   r   r/   halfgennormgompertz	johnsonsbr   	kstwobignr'   r   r   r)   r4   )MMMLErK   )erlangr=   norminvgaussc                  c   s&    t D ]\} }| tvr| |fV  qd S N)r   skip_fit)distnamearg rZ   T/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_fit.pycases_test_cont_fit`   s   
r\   zdistname,argmethodrS   rR   c              	   C   s  t tjddd}t tjddd}| t| v r!|s!d}t| | t| v r0|s0d}t| tt	| }t
|ddgg}t
t
|t t
|jd	 tgd
}tD ]}	t
jd t
jdd |j|d|	i}
|dkry|jtv rydd
i}ni }|j|
fd|i|}|dkrt	|
}|j|fi |}d|j d| d| }t||d|d |dkr| tvrd}t
|
|
f}|d |d
f  d9  < |d |df  d9  < |jdd t	j|d}|j|fi |}d|j d| d| }t||d|d W d    n	1 s	w   Y  || }t
t
|
  t tg|d < t
!t
"|r/t#d!t
$t
||kr= d S qTd"t%| d#}|d$t%| d#7 }|d%t%| d#7 }t#d&|j d#| )'NZSCIPY_XFAILF)defaultZSCIPY_XSLOWz@Failure expected; set environment variable SCIPY_XFAIL=1 to run.z9Very slow; set environment variable SCIPY_XSLOW=1 to run.g              ?   r   i  ignore)allsizerS   flocr]   zCDifferent results fitting uncensored data wrapped as CensoredData: z: est=z est1=g|=)rtolerr_msg   Gz?r   )\(?axis)intervalz2Different results fitting interval-censored data: z est2=皙?znan returned in fitzparameter: 
zestimated: zdiff     : zfit not very good in )&intosgetenvfailing_fitspytestZxfail
xslow_fitsskipgetattrr   npZhstackmaxZvstackthresh_percentfullZnumargs
thresh_min	fit_sizesrandomseederrstatervsnamemle_use_floc0fitZCensoredDatar   fail_interval_censoredZcolumn_stacksortabsmeananyisnanAssertionErrorrb   str)rX   rY   r]   Z	run_xfailZ	run_xslowmsgZdistfnZtrueargZdiffthresholdZfit_sizer   kwdsZestZdata1Zest1Znicrl   Zdata2Zest2difftxtrZ   rZ   r[   test_cont_fitj   s   




 
r   c                 C   s6   t t| }||dd  }t|||d|  d d S )Nrn   z poor mle fit of (loc, scale) in )atolrf   )rw   r   r   r   )r   dataZdesiredr   dactualrZ   rZ   r[   _check_loc_scale_mle_fit   s
   

r   c                  C   s6   t g d} td| ddgd td| ddgd d S )N)ri   {Gz?r   r   Gz?r   r          @uniformri   rh   MbP?expongp=
ף?)rx   arrayr   )r   rZ   rZ   r[   "test_non_default_loc_scale_mle_fit   s   r   c                  C   s.   g d} t jj| dd}t|ddgdd dS )zgh-6167)r   r   r   r   r`   r`   r`   r`   r   )rd   r_   r   r   N)r   r   r   r   )r   ZphatrZ   rZ   r[   test_expon_fit   s   r   c               	   C   s   t t dt dg} d}tjt|d, tt t	j
|  W d    n1 s-w   Y  W d    d S W d    d S 1 sEw   Y  d S )N      z0Optimization converged to parameters that are...match)rx   ZconcatenateZzerosZonesrt   raisesr	   warnsRuntimeWarningr   betar   )r   messagerZ   rZ   r[   test_fit_error   s   Pr   zdist, params)      ?      @)
   333333?r`   c                 C   s|   t jd}t| dr| j}n| j}| j|d|d}||g|R    }| ||}| 	||}t
|| t
|| d S )Nig:pdfd   rc   random_state)rx   r~   default_rnghasattrZlogpdfZlogpmfr   sumnnlfZ_penalized_nnlfr   )distparamsrngZlogpxfxrefres1res2rZ   rZ   r[   test_nnlf_and_related_methods   s   

r   c                  c   s    h d} h d}h d}t tt D ]F}|| v st|ts.d}tj|tjj|ddV  q||v rBd}tj|tjj	|ddV  q||v rVd}tj|tjj
|ddV  q|V  qd S )	N>   rL   	truncnormpoisson_binomr   r   r   r   r   foldnormrF   r    r   rK   >3   rQ   rU   r"   rT   r;   r9   r>   rC   arcsiner8   rO   rA   r?   invgaussrB   rH   rM   r0   r5   r+   rN   	exponnormr   r@   bradfordr2   skewnormweibull_minr-   r!   rE   weibull_maxr&   r$   rP   r'   lognormr<   rD   nbinomrandintr4   ricer   r.   r6   rI   r:   r1   gammabinom>   r3   r   r   r   r(   r#   r   r   rG   skellamr%   nchypergeom_fisherr=   
loguniform
nhypergeomr   r   	hypergeomr*   	betabinomr   zipfiannchypergeom_walleniusZ
betanbinomr/   rJ   r   
reciprocalztested separatelyreasonZmarkstoo slow (>= 0.25s)too slow (>= 1.0s))dictr
   r   
isinstancer   rt   parammarkrv   slowxslow)skip_basic_fitslow_basic_fitxslow_basic_fitr   r   rZ   rZ   r[   cases_test_fit_mle   s    
r   c                  c   s    h d} h d}h d}dh}t tt D ]Y}|| v s!t|ts1d}tj|tjj|ddV  q||v rEd}tj|tjj	|ddV  q||v rYd	}tj|tjj
|ddV  q||v rltjd
}tj||dV  q|V  qd S )N>   rL   r0   r=   rU   r2   r   r   r   r   r   r   r   r   r%   r    r   r   >1   rQ   r"   rT   r;   r9   rC   r8   rO   rA   r   r?   rB   rK   rH   rM   r5   ZgenlogisticZloggammar+   r#   r   r   Zmaxwellr   Zsemicircularr   r   Zanglitr   rE   r   r   r   r'   Zlaplace_asymmetricr   Zwaldr<   r   r4   r   r,   r/   rI   rJ   r:   r1   r   rD   >"   r>   r3   r   r   r   r(   rN   r   r@   rG   r)   r   r7   r   r-   r   r!   r   r   r&   r$   r*   rP   rF   r   r   rL   r   r   r.   r6   r   r   r   r   zFails. Oh well.r   r   r   r   zignore::RuntimeWarning)r   r
   r   r   r   rt   r   r   rv   r   r   filterwarnings)r   r   r   Zwarns_basic_fitr   r   r   rZ   rZ   r[   cases_test_fit_mse  s(   r   c                  c   s:    t t D ]\} }t| tr| dv rq| |fV  qd S )N>   r'   r    )r   r   itemsr   r   )rX   shapesrZ   rZ   r[   cases_test_fitstartT  s   
r   zdistname, shapesc                 C   sr   t t| }tjd}|d}tjddd ||}W d    n1 s'w   Y  |j|d d  s7J d S )NiV r   ra   )invaliddividern   )rw   r   rx   r~   r   r   Z	_fitstartZ	_argcheck)rX   r   r   r   r   guessrZ   rZ   r[   test_fitstart\  s   

r   Hz>r   c           
      C   sB   t | |}|||}|||}	||	k stjj||	||d d S d S )N)re   r   )rw   rx   testingr   )
r   r   Zparams1Zparams0re   r   	nlff_nameZnlffZnlff1Znlff0rZ   rZ   r[   assert_nlff_less_or_closeh  s   


r   c                   @   sp  e Zd ZejZdZej	eZ
ejjddde
dZddgZdddZd	Zd
ZeedZddddZdd Zdd Zdd Zdd Zd@ddZejde dd Zejde dd Zejjdd  Z ejd!d"d#d$ Z!ejj"d%d& Z#d'd( Z$d)d* Z%ejjd+d, Z&d-d. Z'ejjd/d0 Z(d1d2 Z)d3d4 Z*d5d6 Z+d7d8 Z,ejj"d9d: Z-d;d< Z.d=d> Z/d?S )ATestFitl   Va   r   r   r   r   r   r   r   nprm   {Gz?)r   re   r   r   c                O   s   t |d|i|S Nr   r   )selfr   argsr   rZ   rZ   r[   opt|  s   zTestFit.optc                 C   sJ   d}t jt|d td| j| j W d    d S 1 sw   Y  d S )Nz `dist` must be an instance of...r   r   )rt   r   
ValueErrorr   r   r   shape_bounds_ar   r   rZ   rZ   r[   test_dist_iv  s   "zTestFit.test_dist_ivc                 C   s,  d}t jt|d t| jg dg| j W d    n1 s w   Y  d}t jt|d t| jdddtjg| j W d    n1 sGw   Y  t jt|d t| jdddtj	g| j W d    n1 slw   Y  t jt|d t| jg d| j W d    d S 1 sw   Y  d S )	Nz'`data` must be exactly one-dimensional.r   r   r`      z.All elements of `data` must be finite numbers.r   r`   r  )123)
rt   r   r  r   r   r   r  rx   naninfr  rZ   rZ   r[   test_data_iv  s   "zTestFit.test_data_ivc                 C   sP  d}dddd}t jt|d t| j| j| W d    n1 s#w   Y  d}ddg}t jt|d t| j| j| W d    n1 sIw   Y  d	}dd
g}t jt|d t| j| j| W d    n1 sow   Y  ddg}t jt|d t| j| j| W d    n1 sw   Y  d}dg}t jt|d t| j| j| W d    n1 sw   Y  d}g d}t jt|d t| j| j| W d    n1 sw   Y  d}ddd}t jt|d t| j| j| W d    n	1 sw   Y  d}ddg}t jt|d t| j| j| W d    n	1 s-w   Y  d}ddg}t jt|d t| j| j| W d    n	1 sTw   Y  d}t jt|d t| j| j W d    n	1 svw   Y  t	j
 t	j
fdg}t jt|d t| j| j| W d    d S 1 sw   Y  d S )Nz1Bounds provided for the following unrecognized...r   r   r   r   r   r   r  r   z6Each element of a `bounds` sequence must be a tuple...)r   r   r  z6Each element of `bounds` must be a tuple specifying...)r   r   r   r   r   z7A `bounds` sequence must contain at least 2 elements...z;A `bounds` sequence may not contain more than 3 elements...)r   r   r   r   z.There are no values for `p` on the interval...)r   r   r   z.There are no values for `n` on the interval...)r   r   z6There are no integer values for `n` on the interval...)gffffff?g?z0The intersection of user-provided bounds for `n`)rt   r   r   r   r   r   r   r   r  rx   r  )r   r   shape_boundsboundsrZ   rZ   r[   test_bounds_iv  sh   
$zTestFit.test_bounds_ivc                 C   sD  d}dddd}t jt|d tj| j| j| j|d W d    n1 s&w   Y  d}dd	d
}t jt	|d tj| j| j| j|d W d    n1 sPw   Y  ddg}t jt	|d tj| j| j| j|d W d    n1 sww   Y  ddgg}t jt	|d tj| j| j| j|d W d    n1 sw   Y  d}dg}t jt	|d tj| j| j| j|d W d    n1 sw   Y  d}g d}t jt	|d tj| j| j| j|d W d    n1 sw   Y  d}ddd
}t jt|d tj| j| j| j|d W d    n	1 sw   Y  d}g d}t jt|d tj| j| j| j|d W d    n	1 sEw   Y  d}ddd
}t jt|d tj| j| j| j|d W d    n	1 spw   Y  d}g d}t jt|d tj| j| j| j|d W d    d S 1 sw   Y  d S )Nz2Guesses provided for the following unrecognized...r   r      r  r   )r   z+Each element of `guess` must be a scalar...hir   r$   r`   z-A `guess` sequence must contain at least 2...z1A `guess` sequence may not contain more than 3...)r   r`   r     zCGuess for parameter `n` rounded.*|Guess for parameter `p` clipped.*g      @g      z$Guess for parameter `loc` rounded...)r   r   r   z"Guess for parameter `p` clipped...r   z$Guess for parameter `loc` clipped...)r   r   r   )
rt   r   r   r   r   r   r   shape_bounds_dr   r  )r   r   r   rZ   rZ   r[   test_guess_iv  s`   



$zTestFit.test_guess_ivc                 C   s  d}t tt }tj| j}tt|}t	|| }tj
t|d dftjd}|dt|  |d ddf< |dt|  |d ddf< d|d< d	|d
< |j|d  }	|j|d
  }
t|| |	|
g }t|ddr|d d
 }t|	|d
< |j|||d}|d d
 }t|ddr|j|||d}t }|td tj||||| jd}W d    n1 sw   Y  ddd}|| }t|||j|fi | jd|i d S )Nr   r`   )Zdtypeg      $@rn   r   r   r  )gؗҜ<r   ZpmfFr   r   zoverflow encounteredr]   	optimizerr   _penalized_nlpsfmlemser   )r   r   r
   rx   r~   r   r   rw   r   r   emptylenZfloat64signr   listfloorr   nptZsuppress_warningsfilterr   r   r   r   r   tols)r   	dist_namer]   r   NZ	dist_datar   r   r  locscaler   r   supresZ
nlff_namesr   rZ   rZ   r[   basic_fit_test  s>   


zTestFit.basic_fit_testr&  c                 C      | j |ddd d S )Nr  r   r   r,  r   r&  rZ   rZ   r[   test_basic_fit_mle     zTestFit.test_basic_fit_mlec                 C   r-  )Nr  r`   r   r.  r/  rZ   rZ   r[   test_basic_fit_mse  r1  zTestFit.test_basic_fit_msec                 C   sp   d}t j| j}tj}d}|j|||d}ddd}tj|||d| jd}t	|||j
|fdd	i| j d S )
Nr   )r_   r   r   皙?r   r(  r)  r  r  r   r  )rx   r~   r   r   r   r   r   r   r   r   r   r%  r   r'  r   r   r   r   r  r+  rZ   rZ   r[   test_arcsine  s   

zTestFit.test_arcsiner]   r  c           
      C   s   d}t j| j}tj}d}|j|||d}dddd}tj|||| j|d}ddd	| }	t	|||j
|fi | jd
|	i d S )Nr   )r_   r         @r   r3  )r+   r(  r)  )r  r]   r   r  r  r   )rx   r~   r   r   r   rL   r   r   r   r   r   r%  )
r   r]   r'  r   r   r   r   r  r+  r   rZ   rZ   r[   
test_argus,  s   zTestFit.test_argusc                 C   st   d}t j| j}tj}d}|j|||d}ddddd}tj|||d| jd}t	|||j
|fdd	i| j d S )
Nr   )gdsz@g@e?r_   r   r   r3  )abr(  r)  r  r  r   r   )rx   r~   r   r   r   r   r   r   r   r   r   r%  r6  rZ   rZ   r[   	test_beta<  s   
zTestFit.test_betac                 C   sl   d}t j| j}tj}d}|j|||d}dddd}tj|||| jd}t	|||j
|fi | j d S )Nr   )g);?r   r8  r   r3  )cr(  r)  r  )rx   r~   r   r   r   r   r   r   r   r   r   r%  r6  rZ   rZ   r[   test_foldnormL  s   zTestFit.test_foldnormc                 C   r   d}t j| j}tj}d}|j|||d}dddd}tj|||d| jd}t	|||j
|fdd	i| j d S )
Nr   )g7h@r_   r   r   r3  )nur(  r)  r  r  r   r   )rx   r~   r   r   r   rF   r   r   r   r   r   r%  r6  rZ   rZ   r[   test_nakagamiZ  s   
zTestFit.test_nakagamic                 C   r@  )
Nr   )gk?r_   r   r   r3  )r:  r(  r)  r  r  r   r  )rx   r~   r   r   r   r2   r   r   r   r   r   r%  r6  rZ   rZ   r[   test_powerlawh  s   
zTestFit.test_powerlawc                 C   j   d}t j| j}tj}d}|j|||d}dgd }tj|||| jd}t	|||j
|fi | j d S )Nr   )g?g333333@gffffff@gffffff@r   r3  r  r>  )rx   r~   r   r   r   rK   r   r   r   r   r   r%  r6  rZ   rZ   r[   test_truncparetow  s   
zTestFit.test_truncparetoc                 C   rD  )Nr   )r   r   g      ?r   r8  r   r3  r   r>  )rx   r~   r   r   r   r   r   r   r   r   r   r%  r6  rZ   rZ   r[   test_truncweibull_min  s   
zTestFit.test_truncweibull_minc           
      C   s   d}t j| j}tj}d\}}}|j|||||d}dt ddgi}tj|||| j	d}	t
|	j|||ffi | j tj}d\}}|j||||d}tj||| j	d}	t
|	j||ffi | j d S )	Nr   r   ?r   r(  rc   r   r   r      r>  )gY.?r   )rx   r~   r   r   r   r   r   r   r   r   r   r   r%  Z	bernoulli)
r   r'  r   r   r   r   r(  r   r  r+  rZ   rZ   r[   test_missing_shape_bounds  s   
z!TestFit.test_missing_shape_boundsc                 C   s  d}t j| j}tj}d\}}|j|||d}d}d|i}tj|||| jd}	t	|	j
||ffi | j d\}}|j|||d}d	}
d
|
i}tj|||| jd}	t	|	j
||ffi | j tj}d\}}|j||||d}||
d}tj|||| jd}	t	|	j
||ffi | j d S )Nr   )      ?r   rI  )r   r   r(  r>  )r   r   )r)  rc   r   )r   r   r)  rL  r   r(  r)  rc   r   r5  )rx   r~   r   r   r   normr   r   r   r   r   r%  )r   r'  r   r   r(  r)  r   Z
loc_boundsr  r+  Zscale_boundsrZ   rZ   r[   test_fit_only_loc_scale  s*   
zTestFit.test_fit_only_loc_scalec                 C   s   d}t j| j}tj}d\}}|j||||d}t||}t|j	dfi | j
 ||f||fd}t|||}t|j	||ffi | j
 tj}d\}	}
}|j|	|
|||d}dd	d
}tj|||| jd}t|j	|	|
|ffi | j
 d S )Nr   rM  rN  r   r5  rG  rI  )r   rJ  )rH  rH  r   r>  )rx   r~   r   r   r   rO  r   r   r   r   r%  r   r   )r   r'  r   r   r(  r)  r   r+  r  r   r   r  rZ   rZ   r[   test_everything_fixed  s    

 zTestFit.test_everything_fixedc           	      C   sz   d}t j| j}tj}d}|j|||d}| dksJ g d}t|||}d}|j	
|s4J |jdu s;J d S )Nr   )r   r   r   r   )r      r   )r   r   z3Optimization converged to parameter values that areF)rx   r~   r   r   r   r   r   minr   r   
startswithsuccess)	r   r'  r   r   r   r   r  r+  r   rZ   rZ   r[   test_failure  s   zTestFit.test_failurec                 C   s   d}t jd}tj}d}g d}|j|||d}tj|||| jd}t j|j	|fi | j
r2J tj||||| jd}t|j	|fi | j
 d S )Ni  l   ^s )rJ        r   ))r`      )ffffff?F   )g333333?x   r  r   r>  )r   r  )rx   r~   r   r   r   r   r   r   allcloser   r%  r   )r   r'  r   r   r   r  r   r+  rZ   rZ   r[   
test_guess  s   zTestFit.test_guessc                 C   sd   ddg}t j}ddd}t j|||dd}t|jjdd	d
 t j|||dd}t|jjdd	d
 d S )Nr`   r  )r   r   :0yE>r   r5  r  r  r]   r  r   r   r  gRQ@)r   r   r   r   r   r)  )r   r   r   r  Zres_mleZres_mserZ   rZ   r[   test_mse_accuracy_1  s   
zTestFit.test_mse_accuracy_1c                 C   s   t jd}tj}d}|ddj||d}ddd}tj|||d	d
}t |}||d  |d  |d  }||d  |d  |d  }	||	| f}
t|j	|
dd d S )Nl   4gcvD r   r     r   r  r`  r5  r  rb  r   r  r   -C6?re   )
rx   r~   r   r   r   r   r   r   r   r   )r   r   r   r   r   r  r+  r   r:  r;  r   rZ   rZ   r[   test_mse_accuracy_2  s   

zTestFit.test_mse_accuracy_2N)r   )0__name__
__module____qualname__r   r   r   r   rx   r~   r   r   r   r   r  r  r   re   r%  r   r  r  r  r  r,  rt   r   parametrizer   r0  r   r2  r   r7  r9  r   r<  r?  rB  rC  rE  rF  rK  rP  rQ  rW  r_  rc  rg  rZ   rZ   rZ   r[   r   q  sR    

3
/"







r   )xA   =   Q   X   E   Y   7   T   V   rs  G   rn  rs  rn  N   C   `   B   I   K   ;   ru  rp  ?   O   L   r}  U   W   ro  P   ru  rl  rs  ru  r{  rn  r~  @   rl  rs  M   r\  r{  rs  r{  rz  \   Z   r~  r  ru  rz  ru  :   r~  rz  r  r  R   rn  r|  6   r  9   r~  r~  rz  J   r  r}  r  rz  rp  r  D   rn  rz  S   rz  r  rz  rz  ru  ry  rv  r  r  r  rw  r{  r{  r  r  r  r  r  r  ]   r\  rt  r  rn  r  r  <   r  r  r  r  rn  r  ry  r  r{  rn  rp  r  r  H   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjdd Zdd Zdd Zejddg dfdg dfdg dfgdd Zejjejdg d d!d" Zd#d$ Zd%d& Zd'S )(TestGoodnessOfFitc                 C   sV  t j}g d}d}tjt|d tt  | W d    n1 s"w   Y  d}tjt|d t|g dg W d    n1 sCw   Y  d}tjt|d t||dd W d    n1 scw   Y  d}tjt|d t||d	d
 W d    n1 sw   Y  d}tjt|d t||dd W d    d S 1 sw   Y  d S )Nr  z.`dist` must be a \(non-frozen\) instance of...r   z2`data` must be a one-dimensional array of numbers.z`statistic` must be one of...mm)	statisticz"`n_mc_samples` must be an integer.g     D@)n_mc_samplesz$SeedSequence expects int or sequenceZherringr   )r   rO  rt   r   	TypeErrorr   r  )r   r   r   r   rZ   rZ   r[   test_gof_iv,  s,   "zTestGoodnessOfFit.test_gof_ivc                 C   s   t jd}t}t |t j|ddd}ttj||d|d}tj	|tjdi |j
dd}t|j|j t|j|jd	d
 d S )Nl   H]Vh1 r   Zddofr5  ksknown_paramsr  r   exactr]   {Gzt?r   rZ   )rx   r~   r   
examgradesr   stdr   r   rO  kstestcdfr   r  pvaluer   r   r   r  r+  r   rZ   rZ   r[   test_against_ksD  s   
z!TestGoodnessOfFit.test_against_ksc                 C   s|   t jd}t}ttj|d|d}t |t j|ddd}tj	|tjdi |j
dd}t|j|j t|jd	d
d d S )Nl   8<*}p~ r  )r  r   r   r  r5  r  r  g5;Nѡ?r  r   rZ   )rx   r~   r   r  r   r   rO  r   r  r  r  r   r  r  r   r   r   r+  r  r   rZ   rZ   r[   test_against_lillieforsN  s   z)TestGoodnessOfFit.test_against_lillieforsc                 C   s|   t jd}t}t |t j|ddd}ttj||d|d}t	|tjd	i |j
}t|j|j t|j|jdd d S )
Nl   vj!$'C r   r  r5  Zcvmr  r  r   rZ   )rx   r~   r   r  r   r  r   r   rO  Zcramervonmisesr  r   r  r  r  rZ   rZ   r[   test_against_cvmX  s   
z"TestGoodnessOfFit.test_against_cvmc                 C   sV   t jd}t dd}ddd}ttj||d|d}t|jd	 t|j	d
dd d S )Nl   jHJE3 r   e   gF6F@rS  r5  adr  gV-@rm   r  r   
rx   r~   r   Zaranger   r   rO  r   r  r  r   r   r   r  r+  rZ   rZ   r[   test_against_anderson_case_0b  s   

z.TestGoodnessOfFit.test_against_anderson_case_0c                 C   T   t jd}t dd}ddi}ttj||d|d}t|jd t|j	d	d
d d S )Nl   H'b4:/ r   r  r)  g{U=@r  r  guV?r4  r  r   r  r  rZ   rZ   r[   test_against_anderson_case_1m     
z.TestGoodnessOfFit.test_against_anderson_case_1c                 C   r  )Nl   P^QqPr   r  r(  gfHF@r  r  gZd;@皙?r  r   r  r  rZ   rZ   r[   test_against_anderson_case_2x  r  z.TestGoodnessOfFit.test_against_anderson_case_2c                 C   sT   t jd}tjjdddd|d}ttj|d|d}t|j	d	 t|j
d
dd d S )Nl   iUn gBQ_ *?r   r`   r   rN  r  r  r   gS?g333333?r  r   )rx   r~   r   r   r   r   r   rO  r   r  r  )r   r   r   r+  rZ   rZ   r[   test_against_anderson_case_3  s   z.TestGoodnessOfFit.test_against_anderson_case_3c                 C   sv   t jd}tjddddjd|d}ttj|d|d	}tj|d
d}t	|j
|jd  t	|j|jd d dd d S )Nl   /JG gQ8?r   rL  r5  r   r   r  r  gumbel_r)r   r   r   r  r   )rx   r~   r   r   r<   r   r   r  Zandersonr   r  Zcritical_valuesr  Zsignificance_level)r   r   r   r+  r   rZ   rZ   r[   test_against_anderson_gumbel_r  s   
z0TestGoodnessOfFit.test_against_anderson_gumbel_rc                 C   s   t jd}g d}ddd}tjtj||d|d}t|jdd	d
 d|j  k r.dk s1J  J t|jddd t|jddd d S )Nl   fKW7/z )rd  r      rn   r   r   r   r   r5  fillibenr  gG=D;?re  r   r   ?gF8y?gh㈵>rf  gffffff?Mb`?)	rx   r~   r   r   r   rO  r   r  r  )r   r   yr  r+  rZ   rZ   r[   test_against_filliben_norm  s   
	z,TestGoodnessOfFit.test_against_filliben_normc                 C   sf   t jd}|jdddd}tjtj|d|d}dd	d
}tjtj||d|d}t|j|jdd d S )Nl   1gDF3 r   r   r   )r(  r)  rc   r  r  r   r   r5  r  gV瞯<rf  )	rx   r~   r   normalr   r   rO  r   r  r  rZ   rZ   r[   test_filliben_property  s   

z(TestGoodnessOfFit.test_filliben_propertycase   )gV-?gCl?ffffff?g-?gx?2   )g㥛 ?gzG?gv?$C?g1Zd?_   )r  gS?g~jt?gZd;O?gS?c           	      C   sp   t jd}|\}}||}ddd}tjtj||d|d}t g d}t|j|d }t	||d	d
 d S )Nl   +^8r   r   r5  r  r  )r  r   r  rm   r4  r   r  r   )
rx   r~   r   r   r   rO  r   Zscoreatpercentilenull_distributionr   )	r   r  r   r   r   r   r  r+  ZpercentilesrZ   rZ   r[    test_against_filliben_norm_table  s   

z2TestGoodnessOfFit.test_against_filliben_norm_table))r   g?g;On?)rd  gǄ?g-?)rX  g-hC/?g\ Ac?c                 C   sZ   |\}}}t jd}|j|d}tjtj|d|d}t|j|dd t|j	|dd d S )	Nl   vTV_ )rc   r  r  re  rf  gQ?r   )
rx   r~   r   r  r   r   Zrayleighr   r  r  )r   r  r   Zref_statisticZ
ref_pvaluer   r   r+  rZ   rZ   r[   test_against_ppcc  s   
z#TestGoodnessOfFit.test_against_ppccc           	   	   C   s  t jd}tjjdddd|d}ddi}d	d
i}ddi}t jd}ttj|d||||d}t |j	j
jdr:J t|j	j
jd
 t|j	j
jd ddi}t jd}ttj|d||||d}t j|j	j
j|j	j
jddrpJ t j|j|jddr|J t|j	j
jd
 t|j	j
jd dd
d}t jd}ttj|d||||d}t|j	j
jd t|j	j
jd
 t|j	j
jd t |j|jrJ d S )N   zV8t g}-r   r`   r  rN  r=  g*@r)  g(\u+@r(  g33333+)r  guessed_params
fit_paramsr  r   ra  rf  )r=  r)  )rx   r~   r   r   r   r   r   r   r^  Z
fit_resultr   r=  r   r)  r(  r  )	r   r   r   r  r  r  r   r   Zres3rZ   rZ   r[   test_params_effects  sT   






z%TestGoodnessOfFit.test_params_effectsc                 C   sn   dd }t jd}tjjd|d}ttj|ddd||d	}g d
}g d}t |j|}t	||dd d S )Nc                S   s<   t j||d}| |}t j||ddd}t j|d |dS )Nrj   r   r   )rk   prependappendr`   )rx   r   r  r   r   )r   r   rk   r   r  r   rZ   rZ   r[   	greenwood  s   
z:TestGoodnessOfFit.test_custom_statistic.<locals>.greenwoodr  r   r   r   r   r5  r  )r   rm   r4  g?r   g?r   g333333?r[  g?r  r  rh   )g҈?gxܙ	?g&)?gW>?gR?gEկt><?gw-?gL1=B?gi?g1cg?gV(?g?Qٰ?ghsۄ?r  r   )
rx   r~   r   r   r   r   r   Zquantiler  r   )r   r  r   r   resultr   Zexact_quantilesZsimulated_quantilesrZ   rZ   r[   test_custom_statistic  s   	z'TestGoodnessOfFit.test_custom_statisticN)rh  ri  rj  r  r  r  r  r  r  r  r  rt   r   r   r  r  r  rk  r  r  r  r  rZ   rZ   rZ   r[   r  *  s.    







2r  c                   @   s   e Zd Zdd ZdS )TestFitResultc                    s   t jd tjjddd d} fdd}dd	g}tjtj|||d
}z(dd l}d}tj	t
|d |jdd W d    W d S 1 sEw   Y  W d S  ttfyy   d}tj	t|d |jdd W d    Y d S 1 sqw   Y  Y d S w )Nl   u!u\xD r   r   r   r   c                     s   t | i |d iS r   r   )r   kwargsr   rZ   r[   r  4  s   z-TestFitResult.test_plot_iv.<locals>.optimizerrR  r   r>  z!`plot_type` must be one of \{'...r   llama)Z	plot_typez2matplotlib must be installed to use method `plot`.)rx   r~   r   r   rO  r   r   
matplotlibrt   r   r  ZplotModuleNotFoundErrorImportError)r   r   r  r  r+  r  r   rZ   r   r[   test_plot_iv0  s"   &&zTestFitResult.test_plot_ivN)rh  ri  rj  r  rZ   rZ   rZ   r[   r  /  s    r  rV   )r   r   r   )7rq   numpyrx   Znumpy.testingr   r#  r   r   rt   Zscipyr   Zscipy.optimizer   Ztest_continuous_basicr   Z!scipy.stats._distn_infrastructurer	   Zscipy.stats._distr_paramsr
   Zscipy.statsr   r}   rz   r|   Zmle_failing_fitsZmle_Xslow_fitsr   Zmm_failing_fitsZmm_XXslow_fitsZmm_Xslow_fitsrs   ru   r   rW   r\   r   r   rk  r   r   r   r   r   rO  r   r   r   r   r   r   r   r   r  r  r  rZ   rZ   rZ   r[   <module>   sp    


K
.?

	   2
  