a
    Qeǧ                     @   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ee edZdhZddg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.d/ Z-ej "d0e- d1d2 Z.d?d5d6Z/G d7d8 d8Z0g d9Z1G d:d; d;Z2G d<d= d=Z3dS )@    N)assert_allcloseassert_equal)statsdifferential_evolution   )distcont)FitError)distdiscrete)goodness_of_fit)    i'        ?      ?)
gausshypergenexpongengammakappa4ksonekstwoncfncx2
truncexpontukeylambdavonmiseslevy_stable	trapezoidtruncweibull_minstudentized_range)burrchichi2mielkepearson3genhalflogisticrdistparetopowerlawpowerlognorm
wrapcauchyrel_breitwigner)0alpha	betaprimer   burr12Zcauchyr    r!   crystalballdgammadweibullffatiguelifefisk
foldcauchy
genextremer   genhyperbolicgennorm	genparetoZ
halfcauchyinvgamma
invweibull	johnsonsukappa3r   r   ZlevyZlevy_lr   
loglaplacelomaxr"   nakagamir   nctr   r&   r(   	powernormr*   Z
skewcauchytr   triangtruncparetor   r   r   )argusexponpow	exponweibr   r   r$   halfgennormgompertz	johnsonsbr   	kstwobignrecipinvgaussr   r   vonmises_line)MMMLErD   erlangr6   c                  c   s$   t D ]\} }| tvr| |fV  qd S )N)r   skip_fit)distnamearg rT   N/var/www/sunrise/env/lib/python3.9/site-packages/scipy/stats/tests/test_fit.pycases_test_cont_fitV   s    rV   zdistname,argmethodrO   rN   c              	   C   s  | t | v rVzttjd  }W n ty6   d}Y n0 |rVd|  }|d7 }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L |j|d|i}	|dkr|jtv rddi}
ni }
|j|	fd|i|
}|dkrTt|	}|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0    Y  || }t	t	|	 t tg|d< t	 t	!|r`t"dqt	#t	||kr qqd t$| }|d!t$| 7 }|d"t$| 7 }t"d#|j | d S )$NZSCIPY_XFAILTz$Fitting %s doesn't work reliably yetzH [Set environment variable SCIPY_XFAIL=1 to run this test nevertheless.]g              ?   r   i  ignore)allsizerO   flocrW   zCDifferent results fitting uncensored data wrapped as CensoredData: z: est=z est1=g|=)rtolerr_msg   Gz?r   )\(?)Zaxis)intervalz2Different results fitting interval-censored data: z est2=皙?znan returned in fitzparameter: %s
zestimated: %s
zdiff     : %s
zfit not very good in %s
)%failing_fitsintosenviron	Exceptionpytestxfail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AssertionErrorr[   str)rR   rS   rW   rl   msgZdistfnZtrueargZdiffthresholdZfit_sizerw   kwdsZestZdata1Zest1Znicrc   Zdata2Zest2difftxtrT   rT   rU   test_cont_fit`   s~    






0

r   c                 C   s4   t t| }||dd  }t|||d|  d d S )Nre   z"poor mle fit of (loc, scale) in %s)atolr_   )rm   r   rz   r   )rx   dataZdesiredr   dactualrT   rT   rU   _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)rb   {Gz?r   r   Gz?r   r          @uniformrb   ra   MbP?expongp=
ף?)rn   arrayr   )r   rT   rT   rU   "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   rY   rY   rY   rY   r   )r]   rX   r   r   N)r   r   rz   r   )r   ZphatrT   rT   rU   test_expon_fit   s    r   c               	   C   s   t t dt dg} d}tjt|dF tt t	j
|  W d    n1 sZ0    Y  W d    n1 sx0    Y  d S )N      z0Optimization converged to parameters that are...match)rn   ZconcatenatezerosZonesrk   raisesr	   warnsRuntimeWarningr   betarz   )r   messagerT   rT   rU   test_fit_error   s    r   zdist, params)      ?      @)
   g333333?rY   c                 C   s|   t jd}t| dr| j}n| j}| j|d|d}||g|R    }| ||}| 	||}t
|| t
|| d S )Nig:pdfd   r\   random_state)rn   rt   default_rnghasattrZlogpdfZlogpmfrw   sumnnlfZ_penalized_nnlfr   )distparamsrngZlogpxfxrefres1res2rT   rT   rU   test_nnlf_and_related_methods   s    

r   c                  c   s   h d} h d}h d}t tt D ]}|| v s:t|tsZd}tj|tjj|ddV  q$||v rd}tj|tjj	|ddV  q$||v rd}tj|tjj
|ddV  q$|V  q$d S )	N>   r   r   rE   r   r   foldnormrD   r   >-   r3   r4   r#   r?   r>   r-   r&   r,   lognormr'   rA   rL   r=   rF   weibull_maxrK   r)   r<   rB   r.   r5   arcsiner%   r1   norminvgaussrH   ricer   r2   rJ   randintbradfordr8   r:   r    invgaussbinomr"   r7   r;   r+   nbinomr   r0   rI   >   geninvgauss	hypergeomr   
reciprocalr(   
loguniformr*   r   rG   nchypergeom_walleniusr   
nhypergeom	betabinomr$   r   rC   r   	truncnormr6   r   r   r   zipfianskellamnchypergeom_fisherr   r@   ztested separatelyreasonZmarkstoo slow (>= 0.25s)too slow (>= 1.0s))dictr
   r   
isinstancer   rk   parammarkskipslowxslow)skip_basic_fitslow_basic_fitxslow_basic_fitr   r   rT   rT   rU   cases_test_fit_mle   s    
r   c                  c   s   h d} h d}h d}dh}t tt D ]}|| v s@t|ts`d}tj|tjj|ddV  q*||v rd}tj|tjj	|ddV  q*||v rd	}tj|tjj
|ddV  q*||v rtjd
}tj||dV  q*|V  q*d S )N>   r   r6   r   skewnormr   r   r   r   rE   r   r   >8   r3   r4   r   r?   r>   r&   r   r!   r   rA   rL   r=   r   rF   r   rK   r)   r<   rM   ZanglitrB   r.   r5   rG   Zgenlogisticr   r   r$   rC   Zlaplace_asymmetricrP   r   weibull_minr/   Zsemicircularr   r2   rJ   Z	exponnormr   r   r8   r:   r    r"   r;   ZmaxwellZloggammagammar+   ZwaldrD   r   r   r0   rI   >   r#   r-   r   r(   r,   r'   r   r*   r   r   r   r   r%   r   r   r1   r   r   rH   r   r   r   r   r   r9   r7   r   r@   r   zFails. Oh well.r   r   r   r   zignore::RuntimeWarning)r   r
   r   r   r   rk   r   r   r   r   r   filterwarnings)r   r   r   Zwarns_basic_fitr   r   r   rT   rT   rU   cases_test_fit_mse  s$    	r   c                  c   s8   t t D ]&\} }t| tr| dv r(q| |fV  qd S )N>   rL   r   )r   r   itemsr   r   )rR   shapesrT   rT   rU   cases_test_fitstartD  s    
r   zdistname, shapesc                 C   sr   t t| }tjd}|d}tjddd ||}W d    n1 sN0    Y  |j|d d  snJ d S )NiV r   rZ   )invaliddividere   )rm   r   rn   rt   r   rv   Z	_fitstartZ	_argcheck)rR   r   r   r   r   guessrT   rT   rU   test_fitstartL  s    

(r   Hz>r   c           
      C   s>   t | |}|||}|||}	||	k s:tjj||	||d d S )N)r^   r   )rm   rn   testingr   )
r   r   Zparams1Zparams0r^   r   	nlff_nameZnlffZnlff1Znlff0rT   rT   rU   assert_nlff_less_or_closeX  s
    


r   c                   @   s  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 Zdd Zdd Zdd Zdd Zdd Zejde dd Zejde d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/d0 Z)d1d2 Z*d3S )4TestFitl   Va   r   r   r   r   r   r   r   nprd   {Gz?)r   r^   c                 O   s   t |ddi|S )Nru   r   r   )selfargsr   rT   rT   rU   optl  s    zTestFit.optc                 C   sH   d}t jt|d" td| j| j W d    n1 s:0    Y  d S )Nz `dist` must be an instance of...r   r   )rk   r   
ValueErrorr   rz   r   shape_bounds_ar   r   rT   rT   rU   test_dist_ivo  s    zTestFit.test_dist_ivc                 C   s,  d}t jt|d( t| jg dg| j W d    n1 s@0    Y  d}t jt|d, t| jdddtjg| j W d    n1 s0    Y  t jt|d, t| jdddtj	g| j W d    n1 s0    Y  t jt|d& t| jg d| j W d    n1 s0    Y  d S )	Nz'`data` must be exactly one-dimensional.r   r   rY      z.All elements of `data` must be finite numbers.r   rY   r   )123)
rk   r   r   r   rz   r   r   rn   naninfr   rT   rT   rU   test_data_ivt  s    6::zTestFit.test_data_ivc                 C   sT  d}dddd}t jt|d" t| j| j| W d    n1 sF0    Y  d}ddg}t jt|d" t| j| j| W d    n1 s0    Y  d	}dd
g}t jt|d" t| j| j| W d    n1 s0    Y  ddg}t jt|d" t| j| j| W d    n1 s(0    Y  d}dg}t jt|d" t| j| j| W d    n1 st0    Y  d}g d}t jt|d" t| j| j| W d    n1 s0    Y  d}ddd}t jt|d" t| j| j| W d    n1 s0    Y  d}ddg}t jt|d" t| j| j| W d    n1 s`0    Y  d}ddg}t jt|d" t| j| j| W d    n1 s0    Y  d}t jt|d  t| j| j W d    n1 s0    Y  t	j
 t	j
fdg}t jt|d" t| j| j| W d    n1 sF0    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`)rk   r   r   r   rz   r   r   r   r   rn   r   )r   r   shape_boundsboundsrT   rT   rU   test_bounds_iv  sR    000222
2220zTestFit.test_bounds_ivc                 C   sH  d}dddd}t jt|d( tj| j| j| j|d W d    n1 sL0    Y  d}dd	d
}t jt	|d( tj| j| j| j|d W d    n1 s0    Y  ddg}t jt	|d( tj| j| j| j|d W d    n1 s0    Y  ddgg}t jt	|d( tj| j| j| j|d W d    n1 s@0    Y  d}dg}t jt	|d( tj| j| j| j|d W d    n1 s0    Y  d}g d}t jt	|d( tj| j| j| j|d W d    n1 s0    Y  d}ddd
}t jt|d( tj| j| j| j|d W d    n1 s<0    Y  d}g d}t jt|d( tj| j| j| j|d W d    n1 s0    Y  d}ddd
}t jt|d( tj| j| j| j|d W d    n1 s0    Y  d}g d}t jt|d( tj| j| j| j|d W d    n1 s:0    Y  d S )Nz2Guesses provided for the following unrecognized...r   r      r  r   )r   z+Each element of `guess` must be a scalar...hir   r1   rY   z-A `guess` sequence must contain at least 2...z1A `guess` sequence may not contain more than 3...)r   rY   r      z"Guess for parameter `n` rounded...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   )
rk   r   r   r   rz   r   r   shape_bounds_dr   r   )r   r   r   rT   rT   rU   test_guess_iv  sL    6
66
888
88
8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r4|j|||d}t 2}|td tj||||| jd}W d    n1 sv0    Y  ddd}|| }t|||j|fi | jd|i d S )Nr   rY   )Zdtypeg      $@re   r   r   r  )gؗҜ<r   ZpmfFr   r   zoverflow encountered)rW   	optimizerr   Z_penalized_nlpsf)mlemser   )r   r   r
   rn   rt   r   ru   rm   r   r   emptylenfloat64signr   listfloorrw   nptZsuppress_warningsfilterr   rz   r   r   r   tols)r   	dist_namerW   NZ	dist_datar   r   r   r  locscaler   r   supresZ
nlff_namesr   rT   rT   rU   basic_fit_test  s<    

&
zTestFit.basic_fit_testr  c                 C   s   |  |d d S )Nr  r  r   r  rT   rT   rU   test_basic_fit_mle  s    zTestFit.test_basic_fit_mlec                 C   s   |  |d d S )Nr  r   r!  rT   rT   rU   test_basic_fit_mse	  s    zTestFit.test_basic_fit_msec                 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   )rX   r         @r   皙?r   )r    r  r  r  )rn   rt   r   ru   r   rE   rw   rz   r   r   r   r  r   r  r   r   r   r   r  r  rT   rT   rU   
test_argus  s    zTestFit.test_argusc                 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   r$  r   r%  )cr  r  r'  )rn   rt   r   ru   r   r   rw   rz   r   r   r   r  r(  rT   rT   rU   test_foldnorm  s    zTestFit.test_foldnormc                 C   sj   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   r%  r	  r'  )rn   rt   r   ru   r   rD   rw   rz   r   r   r   r  r(  rT   rT   rU   test_truncpareto)  s    
zTestFit.test_truncparetoc                 C   sj   d}t j| j}tj}d}|j|||d}dgd }tj|||| jd}t	|||j
|fi | j d S )Nr   )r   r   g      ?r   r$  r   r%  r   r'  )rn   rt   r   ru   r   r   rw   rz   r   r   r   r  r(  rT   rT   rU   test_truncweibull_min7  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  r\   r   r   r      r'  )gY.?r   )rn   rt   r   ru   r   r   rw   r   rz   r   r   r   r  Z	bernoulli)
r   r  r   r   r   r   r  r   r  r  rT   rT   rU   test_missing_shape_boundsE  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   r0  )r   r   r  r'  )r   r   )r  r\   r   r  r3  r   r  r  r\   r   r  r  )rn   rt   r   ru   r   normrw   rz   r   r   r   r  )r   r  r   r   r  r  r   Z
loc_boundsr  r  Zscale_boundsrT   rT   rU   test_fit_only_loc_scaleZ  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   r4  r5  r   r6  r.  r0  )r   r1  )r/  r/  r   r'  )rn   rt   r   ru   r   r7  rw   rz   r   r   r  r   r   )r   r  r   r   r  r  r   r  r  r   r   r  rT   rT   rU   test_everything_fixedw  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	
|shJ |jdu svJ d S )Nr   )r   r   r   r   )r      r   )r   r   z3Optimization converged to parameter values that areF)rn   rt   r   ru   r   r   rw   minrz   r   
startswithsuccess)	r   r  r   r   r   r   r  r  r   rT   rT   rU   test_failure  s    zTestFit.test_failurec                 C   s   d}t j| j}tj}d}g d}|j|||d}tj|||| jd}t j	|j
|fi | jrfJ tj||||| jd}t|j
|fi | j d S )Ni  )r1        r   ))rY      )gffffff?F   )g333333?x   r  r   r'  )r   r  )rn   rt   r   ru   r   r   rw   rz   r   allcloser   r  r   )r   r  r   r   r   r  r   r  rT   rT   rU   
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 )NrY   r	  )r   r   :0yE>r   r6  r  r  rW   r   r   r   r  gRQ@)r   r   rz   r   r   r  )r   r   r   r  Zres_mleZres_mserT   rT   rU   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  rG  r6  r  rI  r   r  r   -C6?r^   )
rn   rt   r   r   r   rw   rz   r|   r   r   )r   r   r   r   r   r  r  r   abr   rT   rT   rU   test_mse_accuracy_2  s    

zTestFit.test_mse_accuracy_2N)+__name__
__module____qualname__r   r   r   ru   rn   rt   r   r   rw   r   r   r
  r   r^   r  r   r   r  r  r  r  rk   r   parametrizer   r"  r   r#  r)  r+  r,  r-  r2  r8  r9  r?  r   rF  rJ  rP  rT   rT   rT   rU   r   a  s>   

3/"


r   )xA   =   Q   X   E   Y   7   T   V   r\  G   rW  r\  rW  N   C   `   B   I   K   ;   r^  rY  ?   O   L   rf  U   W   rX  P   r^  rU  r\  r^  rd  rW  rg  @   rU  r\  M   rC  rd  r\  rd  rc  \   Z   rg  rk  r^  rc  r^  :   rg  rc  rl  rm  R   rW  re  6   rq  9   rg  rg  rc  J   rq  rf  rl  rc  rY  rj  D   rW  rc  S   rc  rk  rc  rc  r^  rb  r_  rl  rt  ru  r`  rd  rd  rk  ri  rt  rh  rk  rm  ]   rC  r]  rk  rW  rv  ru  <   ri  rl  rt  rq  rW  rm  rb  ri  rd  rW  rY  rx  rv  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%S )&TestGoodnessOfFitc                 C   sX  t j}g d}d}tjt|d tt  | W d    n1 sD0    Y  d}tjt|d  t|g dg W d    n1 s0    Y  d}tjt|d t||dd W d    n1 s0    Y  d}tjt|d t||d	d
 W d    n1 s0    Y  d}tjt|d t||dd W d    n1 sJ0    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"'herring' cannot be used to seed aZherring)r   )r   r7  rk   r   	TypeErrorr   r   )r   r   r   r   rT   rT   rU   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f i |j
dd}t|j|j t|j|jd	d
 d S )Nl   H]Vh1 r   Zddofr6  ksknown_paramsr|  r   exactrW   {Gzt?r   )rn   rt   r   
examgradesr~   stdr   r   r7  kstestcdfr   r|  pvaluer   r   r   r  r  r   rT   rT   rU   test_against_ks  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f i |j
dd}t|j|j t|jd	d
d d S )Nl   8<*}p~ r  r|  r   r   r  r6  r  r  g5;Nѡ?r  r   )rn   rt   r   r  r   r   r7  r~   r  r  r  r   r|  r  r   r   r   r  r  r   rT   rT   rU   test_against_lilliefors  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f i |j
}t|j|j t|j|jdd d S )	Nl   vj!$'C r   r  r6  Zcvmr  r  r   )rn   rt   r   r  r~   r  r   r   r7  Zcramervonmisesr  r   r|  r  r  rT   rT   rU   test_against_cvm  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@r;  r6  adr  gV-@rd   r  r   
rn   rt   r   Zaranger   r   r7  r   r|  r  r   r   r   r  r  rT   rT   rU   test_against_anderson_case_0  s    

z.TestGoodnessOfFit.test_against_anderson_case_0c                 C   sT   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?r&  r  r   r  r  rT   rT   rU   test_against_anderson_case_1  s    
z.TestGoodnessOfFit.test_against_anderson_case_1c                 C   sT   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   P^QqPr   r  r  gfHF@r  r  gZd;@皙?r  r   r  r  rT   rT   rU   test_against_anderson_case_2'  s    
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   rY   r   r5  r  r  gS?g333333?r  r   )rn   rt   r   r   r   rw   r   r7  r   r|  r  )r   r   r   r  rT   rT   rU   test_against_anderson_case_32  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   r3  r6  r   r   r  r  gumbel_r)r   r   r   r  r   )rn   rt   r   r   r5   rw   r   r  Zandersonr   r|  Zcritical_valuesr  Zsignificance_level)r   r   r   r  r   rT   rT   rU   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 rZdk s`n J t|jddd t|jddd d S )Nl   fKW7/z )rK  r      re   r   r   r   r   r6  fillibenr  gG=D;?rL  r   r   g?gF8y?gh㈵>rM  gffffff?Mb`?)	rn   rt   r   r   r   r7  r   r|  r  )r   r   yr  r  rT   rT   rU   test_against_filliben_normH  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  r\   r  r  r   r   r6  r  gV瞯<rM  )	rn   rt   r   normalr   r   r7  r   r|  r  rT   rT   rU   test_filliben_property_  s    

z(TestGoodnessOfFit.test_filliben_propertycase   )gV-?gCl?gffffff?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   r6  r  r  )r  r   r  rd   r&  r   r  r   )
rn   rt   r   r   r   r7  r   Zscoreatpercentilenull_distributionr   )	r   r  r   r   r   r   r  r  ZpercentilesrT   rT   rU    test_against_filliben_norm_tablej  s    

z2TestGoodnessOfFit.test_against_filliben_norm_table))r   g?g;On?)rK  gǄ?g-?)r@  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_ )r\   r  r  rL  rM  gQ?r   )
rn   rt   r   r  r   r   Zrayleighr   r|  r  )r   r  r   Zref_statisticZ
ref_pvaluer   r   r  rT   rT   rU   test_against_ppccy  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rtJ 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rJ t j|j|jddrJ 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 )Nl   zV8t g}-r   rY   r  r5  r*  g*@r  g(\u+@r  g33333+)r}  guessed_params
fit_paramsr  r   rH  rM  )r*  r  )rn   rt   r   r   r   rw   r   r   rE  Z
fit_resultr   r*  r   r  r  r  )	r   r   r   r  r  r  r   r   Zres3rT   rT   rU   test_params_effects  sT    






z%TestGoodnessOfFit.test_params_effectsN)rQ  rR  rS  r  r  r  r  r  r  r  r  rk   r   r   r  r  r  rT  r  r  r  rT   rT   rT   rU   rz    s*   
	





rz  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
}zJdd l}d}tj	t
|d |jdd W d    n1 s0    Y  W nT ttfy   d}tj	t|d |jdd W d    n1 s0    Y  Y n0 d S )Nl   u!u\xD r   r   r   r   c                     s   t | i |d iS )Nru   r   )r   kwargsr   rT   rU   r    s    z-TestFitResult.test_plot_iv.<locals>.optimizerr:  r   r'  z!`plot_type` must be one of \{'...r   Zllama)Z	plot_typez2matplotlib must be installed to use method `plot`.)rn   rt   r   r   r7  rw   rz   
matplotlibrk   r   r   ZplotModuleNotFoundErrorImportError)r   r   r  r  r  r  r   rT   r  rU   test_plot_iv  s    .zTestFitResult.test_plot_ivN)rQ  rR  rS  r  rT   rT   rT   rU   r    s   r  )N)r   r   r   )4rh   numpyrn   Znumpy.testingr   r  r   r   rk   Zscipyr   Zscipy.optimizer   Ztest_continuous_basicr   Z!scipy.stats._distn_infrastructurer	   Zscipy.stats._distr_paramsr
   Zscipy.statsr   rs   rp   rr   Zmle_failing_fitsry   Zmm_failing_fitsZmm_slow_fitsrf   r{   rQ   rV   r   r   rT  r   r   r   r   r   r7  r   r   r   r   r   r   r   r   r  rz  r  rT   rT   rT   rU   <module>   sh   
J

,<
  
	  q
 f