U
    Hvfp                  x   @   s4  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 d
ddgZdZdZdddddddddddddddddd d!d"d#gZd$d%dd&d'd(dd)d*d+d,d-d.d/d0dd1d2d3d4d5d6d7d8ddd9d:d d;d<dd=dd>dd?dd@dAdBd!dCdd"dd#g/ZdDdEdFdddGdHdIdJddKdLdddMgZee edNZdOd1gZdPdQ Zejjej dRe ej dSdTdUgdVdW Z!ddXdYZ"dZd[ Z#d\d] Z$d^d_ Z%ej d`e
j&dafe
j'dbfgdcdd Z(dedf Z)dgdh Z*didj Z+ej dke+ dldm Z,ddpdqZ-G drds dsZ.dtdudvdwdxdydzd{d|d{d}dvd{dvd~ddddddd}dxdddddddwdd}dtd{d}ddvdddtd{dddd{ddddddd}dd}dddddddvdddddddddddddxdddvddddddd}dd~ddddddddddddddd|ddvddddddddvdddddvdxdddgxZ/G dd dZ0G dd dZ1dS )    N)assert_allcloseassert_equal)statsdifferential_evolution   )distcont)FitError)distdiscrete)goodness_of_fit    i'        ?g      ?burrchi2
gausshypergenexpongengammakappa4ksonekstwomielkencfncx2pearson3powerlognorm
truncexpontruncparetotukeylambdavonmiseslevy_stable	trapezoidtruncweibull_minstudentized_rangealpha	betaprimeburr12Zcauchychicrystalballdgammadweibullffatiguelifefisk
foldcauchy
genextremegenhyperbolicgennorm	genparetoZ
halfcauchyinvgamma
invweibull	johnsonsukappa3ZlevyZlevy_l
loglaplacelomaxnakagaminctpareto	powernormZ
skewcauchyttriangargusexponpow	exponweibgenhalflogistichalfgennormgompertz	johnsonsb	kstwobignrecipinvgaussvonmises_line)MMMLEerlangc                  c   s$   t D ]\} }| tkr| |fV  qd S )N)r   skip_fit)distnamearg rO   >/tmp/pip-unpacked-wheel-96ln3f52/scipy/stats/tests/test_fit.pycases_test_cont_fitI   s    rQ   zdistname,argmethodrJ   rI   c              
   C   s  | t | krXzttjd  }W n tk
r8   d}Y nX |rXd|  }|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$ |j|d|i}	|j|	|d}
W 5 Q R X |
| }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sizerR   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fitabsmeananyisnanAssertionErrorrV   strname)rM   rN   rR   r`   msgZdistfnZtrueargZdiffthresholdZfit_sizerk   ZestZdifftxtrO   rO   rP   test_cont_fitS   sB    




rv   c                 C   s4   t t| }||dd  }t|||d|  d d S )NrY   z"poor mle fit of (loc, scale) in %s)atolerr_msg)ra   r   rl   r   )rs   dataZdesiredrw   dactualrO   rO   rP   _check_loc_scale_mle_fit   s
    
r|   c               
   C   sB   t ddddddddg} td| ddgd td| dd	gd d S )
Ng)\(?g{Gz?gGz?       @uniformgGz?MbP?expongp=
ף?)rb   arrayr|   )ry   rO   rO   rP   "test_non_default_loc_scale_mle_fit   s    r   c                  C   s:   ddddddddg} t jj| dd}t|ddgdd dS )zgh-6167r   rT   )ZflocrS   r   rw   N)r   r   rl   r   )ry   ZphatrO   rO   rP   test_expon_fit   s    r   c               
   C   s^   t t dt dg} d}tjt|d( tt t	j
|  W 5 Q R X W 5 Q R X d S )N      z0Optimization converged to parameters that are...match)rb   ZconcatenatezerosZonesr_   raisesr	   warnsRuntimeWarningr   betarl   )ry   messagerO   rO   rP   test_fit_error   s    r   zdist, params)      ?      @)
   g333333?rT   c                 C   sz   t jd}t| dr| j}n| j}| j|d|d}||f|   }| ||}| 	||}t
|| t
|| d S )Nig:pdfd   rW   random_state)rb   rh   default_rnghasattrZlogpdfZlogpmfrk   sumnnlfZ_penalized_nnlfr   )distparamsrngZlogpxfxrefres1res2rO   rO   rP   test_nnlf_and_related_methods   s    

r   c               ,   c   sL  ddddddddh} d	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4h,}d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOh}t tt D ]}|| kst|tsdP}tj|tjj|dQdRV  q||krdS}tj|tjj	|dQdRV  q||kr@dT}tj|tjj
|dQdRV  q|V  qd S )UNr?   foldnormr   r"   r   r    r#   r   r&   rE   bradfordr-   r   r@   rdistnorminvgaussr%   powerlawr;   r5   r7   
wrapcauchyweibull_maxarcsinebinomricer~   r+   r4   r2   nbinomr6   lognormrC   r   r$   r=   r(   r,   r9   rF   rD   r*   r8   invgaussrG   r'   r.   r<   r1   randintr/   nchypergeom_fishernchypergeom_walleniusr   r   r   r0   geninvgaussr   skellamr   	hypergeom
nhypergeomzipfianr   	truncnormr   r   
loguniform
reciprocalr!   r:   r   	betabinomrA   rB   r   r>   ztested separatelyreasonZmarkstoo slow (>= 0.25s)too slow (>= 1.0s))dictr
   r   
isinstancerr   r_   parammarkskipslowxslow)skip_basic_fitslow_basic_fitxslow_basic_fitr   r   rO   rO   rP   cases_test_fit_mle   s       
                              
                  	

r   c               7   c   s  ddddddddd	d
dh} ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBh7}dCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^h}d_h}t tt D ]}|| kst|tsd`}tj|tjj|dadbV  q||kr<dc}tj|tjj	|dadbV  q||krfdd}tj|tjj
|dadbV  q||krtjde}tj||dbV  q|V  qd S )fNr    r#   r   skewnormr   r   r   r   r0   r?   r   Zwaldr/   ZanglitZsemicircularrF   r   Zgenlogisticr   r-   r~   Z	exponnormZmaxwellr8   Zlaplace_asymmetricr   r.   r2   r<   r7   r   rG   r@   r   r   rD   r*   r   weibull_minr5   Zloggammar6   r,   r;   r4   r$   rK   r)   r   r(   r9   r"   r=   rH   r>   r   gammar   r'   rE   rA   rB   r   r   r   r   r   rC   r3   r   r   r&   r!   r   r+   r   r   r   r   r   r%   r   r1   r   r   r   r:   r   r   r   r   r   r   r   r   zFails. Oh well.r   r   r   r   zignore::RuntimeWarning)r   r
   r   r   rr   r_   r   r   r   r   r   filterwarnings)r   r   r   Zwarns_basic_fitr   r   r   rO   rO   rP   cases_test_fit_mse   s                                                              


r   c                  c   s8   t t D ]&\} }t| tr| dkr(q| |fV  qd S )N>   r#   rG   )r   r   itemsr   rr   )rM   shapesrO   rO   rP   cases_test_fitstart	  s    
r   zdistname, shapesc              	   C   s^   t t| }tjd}|d}tjddd ||}W 5 Q R X |j|d d  sZtd S )NiV r   rU   )invaliddividerY   )	ra   r   rb   rh   r   rj   Z	_fitstartZ	_argcheckrq   )rM   r   r   r   ry   guessrO   rO   rP   test_fitstart  s    

r   Hz>r   c           
      C   s>   t | |}|||}|||}	||	k s:tjj||	||d d S )N)rtolrw   )ra   rb   testingr   )
r   ry   Zparams1Zparams0r   rw   	nlff_nameZnlffZnlff1Znlff0rO   rO   rP   assert_nlff_less_or_close  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p皙?g{Gz?)rw   r   c                 O   s   t |ddi|S )Nri   r   r   )selfargskwdsrO   rO   rP   opt1  s    zTestFit.optc              	   C   s4   d}t jt|d td| j| j W 5 Q R X d S )Nz `dist` must be an instance of...r   r   )r_   r   
ValueErrorr   rl   ry   shape_bounds_ar   r   rO   rO   rP   test_dist_iv4  s    zTestFit.test_dist_ivc              	   C   s   d}t jt|d  t| jdddgg| j W 5 Q R X d}t jt|d" t| jdddtjg| j W 5 Q R X t jt|d" t| jdddtj	g| j W 5 Q R X t jt|d t| jddd	g| j W 5 Q R X d S )
Nz'`data` must be exactly one-dimensional.r   r   rT      z.All elements of `data` must be finite numbers.123)
r_   r   r   r   rl   r   r   rb   naninfr   rO   rO   rP   test_data_iv9  s    $&&zTestFit.test_data_ivc              	   C   sl  d}dddd}t jt|d t| j| j| W 5 Q R X d}ddg}t jt|d t| j| j| W 5 Q R X d	}dd
g}t jt|d t| j| j| W 5 Q R X ddg}t jt|d t| j| j| W 5 Q R X d}dg}t jt|d t| j| j| W 5 Q R X d}ddddg}t jt|d t| j| j| W 5 Q R X d}ddd}t jt|d t| j| j| W 5 Q R X d}ddg}t jt|d t| j| j| W 5 Q R X d}ddg}t jt|d t| j| j| W 5 Q R X d}t jt|d t| j| j W 5 Q R X t	j
 t	j
fdg}t jt|d t| j| j| W 5 Q R X 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...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`)r_   r   r   r   rl   r   ry   r   r   rb   r   )r   r   shape_boundsboundsrO   rO   rP   test_bounds_ivF  sR    
zTestFit.test_bounds_ivc              	   C   sz  d}dddd}t jt|d tj| j| j| j|d W 5 Q R X d}dd	d
}t jt	|d tj| j| j| j|d W 5 Q R X ddg}t jt	|d tj| j| j| j|d W 5 Q R X ddgg}t jt	|d tj| j| j| j|d W 5 Q R X d}dg}t jt	|d tj| j| j| j|d W 5 Q R X d}ddddg}t jt	|d tj| j| j| j|d W 5 Q R X d}ddd
}t jt|d tj| j| j| j|d W 5 Q R X d}dddg}t jt|d tj| j| j| j|d W 5 Q R X d}ddd
}t jt|d tj| j| j| j|d W 5 Q R X d}dddg}t jt|d tj| j| j| j|d W 5 Q R X d S )Nz2Guesses provided for the following unrecognized...r   r      r   r   )r   z+Each element of `guess` must be a scalar...hir   r+   rT   z-A `guess` sequence must contain at least 2...z1A `guess` sequence may not contain more than 3...r      z"Guess for parameter `n` rounded...g      @g      z$Guess for parameter `loc` rounded...r   z"Guess for parameter `p` clipped...z$Guess for parameter `loc` clipped...)
r_   r   r   r   rl   r   ry   shape_bounds_dr   r   )r   r   r   rO   rO   rP   test_guess_ivy  sL    "
""
"""
"
"
"
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 (}|td tj||||| jd}W 5 Q R X ddd}|| }t|||j|f| jd|i d S )Nr   rT   )Zdtypeg      $@rY   r   r   r   )gؗҜ<r   ZpmfFr   r   zoverflow encountered)rR   	optimizerr   Z_penalized_nlpsf)mlemser   )r   r   r
   rb   rh   r   ri   ra   r   r   emptylenZfloat64signr~   listfloorrk   nptZsuppress_warningsfilterr   rl   r   r   r   tols)r   	dist_namerR   NZ	dist_datar   r   r   r   locscaler   ry   supresZ
nlff_namesr   rO   rO   rP   basic_fit_test  s<    


zTestFit.basic_fit_testr
  c                 C   s   |  |d d S )Nr   r  r   r
  rO   rO   rP   test_basic_fit_mle  s    zTestFit.test_basic_fit_mlec                 C   s   |  |d d S )Nr  r  r  rO   rO   rP   test_basic_fit_mse  s    zTestFit.test_basic_fit_msec                 C   sh   d}t j| j}tj}d}|j|||d}dddd}tj|||| jd}t	|||j
|f| j d S )Nr   )rS   r}         @r   皙?r   )r'   r  r  r   )rb   rh   r   ri   r   r?   rk   rl   r   r   r   r	  r   r  r   r   r   ry   r   r  rO   rO   rP   
test_argus  s    zTestFit.test_argusc                 C   sh   d}t j| j}tj}d}|j|||d}dddd}tj|||| jd}t	|||j
|f| j d S )Nr   )g);?r}   r  r   r  )cr  r  r  )rb   rh   r   ri   r   r   rk   rl   r   r   r   r	  r  rO   rO   rP   test_foldnorm  s    zTestFit.test_foldnormc                 C   sf   d}t j| j}tj}d}|j|||d}dgd }tj|||| jd}t	|||j
|f| j d S )Nr   )g?g333333@gffffff@gffffff@r   r  r   r  )rb   rh   r   ri   r   r   rk   rl   r   r   r   r	  r  rO   rO   rP   test_truncpareto  s    
zTestFit.test_truncparetoc                 C   sf   d}t j| j}tj}d}|j|||d}dgd }tj|||| jd}t	|||j
|f| j d S )Nr   )r   r   g      ?r}   r  r   r  r   r  )rb   rh   r   ri   r   r"   rk   rl   r   r   r   r	  r  rO   rO   rP   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| j tj}d\}}|j||||d}tj||| j	d}	t
|	j||ff| j d S )	Nr   r   ?r   r  rW   r   r   r      r  )gY.?r   )rb   rh   r   ri   r   r   rk   r   rl   r   r   r   r	  Z	bernoulli)
r   r  r   r   r   r   r  ry   r   r  rO   rO   rP   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| j d\}}|j|||d}d}
d	|
i}tj|||| jd}	t	|	j
||ff| j tj}d
\}}|j||||d}||
d}tj|||| jd}	t	|	j
||ff| j d S )Nr   )      ?r   r!  )r   r   r  r  )r   r   )r  rW   r   r  r$  r   r  r  rW   r   r  r  )rb   rh   r   ri   r   normrk   rl   r   r   r   r	  )r   r  r   r   r  r  ry   Z
loc_boundsr   r  Zscale_boundsrO   rO   rP   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| j
 ||f||fd}t|||}t|j	||ff| j
 tj}d\}	}
}|j|	|
|||d}dd	d
}tj|||| jd}t|j	|	|
|ff| j
 d S )Nr   r%  r&  r   r'  r  r!  )r   r"  )r   r   r   r  )rb   rh   r   ri   r   r(  rk   rl   r   r   r	  r   r   )r   r  r   r   r  r  ry   r  r   r   r   r   rO   rO   rP   test_everything_fixed<  s     

zTestFit.test_everything_fixedc           	      C   s|   d}t j| j}tj}d}|j|||d}| dks>tdddg}t	|||}d}|j
|sjt|jd	ksxtd S )
Nr   )r   r   r   r   r      r   )r   r   z3Optimization converged to parameter values that areF)rb   rh   r   ri   r   r   rk   minrq   rl   r   
startswithsuccess)	r   r  r   r   r   ry   r   r  r   rO   rO   rP   test_failureU  s    
zTestFit.test_failurec                 C   s   d}t j| j}tj}d}ddddg}|j|||d}tj|||| jd}t j	|j
|f| jrfttj||||| jd	}t|j
|f| j d S )
Ni  )r"        r   )rT      )gffffff?F   )g333333?x   r   r   r  )r   r   )rb   rh   r   ri   r   r   rk   rl   r   allcloser   r	  rq   r   )r   r  r   r   r   r   ry   r  rO   rO   rP   
test_guesse  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 )NrT   r   )r   r   :0yE>r   r'  r   r   rR   r   r   r   r  gRQ@)r   r   rl   r   r   r  )r   ry   r   r   Zres_mleZres_mserO   rO   rP   test_mse_accuracy_1v  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   r8  r'  r  r:  r   r   r   g-C6?r   )
rb   rh   r   r   r~   rk   rl   sortr   r   )r   r   r   r   ry   r   r  r   abr   rO   rO   rP   test_mse_accuracy_2  s    

zTestFit.test_mse_accuracy_2N)+__name__
__module____qualname__r   r   r   ri   rb   rh   r   r   rk   ry   r   r   rw   r   r	  r   r   r   r   r   r  r_   r   parametrizer   r  r   r  r  r  r  r  r#  r)  r*  r0  r   r7  r;  rA  rO   rO   rO   rP   r   &  s>   

3/"


r   A   =   Q   X   E   Y   7   T   V   G   N   C   `   B   I   K   ;   ?   O   L   U   W   P   @   M   r4  \   Z   :   R   6   9   J   D   S   ]   <   H   c                   @   sd   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S )TestGoodnessOfFitc              	   C   s   t j}dddg}d}tjt|d tt  | W 5 Q R X d}tjt|d t|dddgg W 5 Q R X d}tjt|d t||dd	 W 5 Q R X d
}tjt|d t||dd W 5 Q R X d}tjt|d t||dd W 5 Q R X d S )Nr   rT   r   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   r(  r_   r   	TypeErrorr   r   )r   r   r   r   rO   rO   rP   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 |j
dd}t|j|j t|j|jd	d
 d S )Nl   H]Vh1 r   Zddofr'  ksknown_paramsrm  r   exactrX   {Gzt?r   )rb   rh   r   
examgradesrn   stdr   r   r(  kstestcdfr   rm  pvaluer   r   r   rt  r  r   rO   rO   rP   test_against_ks  s    
 z!TestGoodnessOfFit.test_against_ksc                 C   sx   t jd}t}ttj|d|d}t |t j|ddd}tj	|tjf |j
dd}t|j|j t|jd	d
d d S )Nl   8<*}p~ rr  rm  r   r   rq  r'  ru  rX   g5;Nѡ?rv  r   )rb   rh   r   rw  r   r   r(  rn   rx  ry  rz  r   rm  r{  )r   r   r   r  rt  r   rO   rO   rP   test_against_lilliefors  s    z)TestGoodnessOfFit.test_against_lillieforsc                 C   sx   t jd}t}t |t j|ddd}ttj||d|d}t	|tjf |j
}t|j|j t|j|jdd d S )	Nl   vj!$'C r   rq  r'  Zcvmrs  rv  r   )rb   rh   r   rw  rn   rx  r   r   r(  Zcramervonmisesrz  r   rm  r{  r|  rO   rO   rP   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,  r'  adrs  gV-@r   rv  r   
rb   rh   r   Zaranger   r   r(  r   rm  r{  r   r   r   rt  r  rO   rO   rP   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  rs  guV?r  rv  r   r  r  rO   rO   rP   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  rs  gZd;@g?rv  r   r  r  rO   rO   rP   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   rT   r   r&  r  r~  gS?g333333?rv  r   )rb   rh   r   r   r   rk   r   r(  r   rm  r{  )r   r   r   r  rO   rO   rP   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   r$  r'  r   r   r  r~  gumbel_r)r   r   r   rv  r   )rb   rh   r   r   r/   rk   r   r  Zandersonr   rm  Zcritical_valuesr{  Zsignificance_level)r   r   r   r  r   rO   rO   rP   test_against_anderson_gumbel_r  s     
z0TestGoodnessOfFit.test_against_anderson_gumbel_rc           	   	   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rtt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rtt j|j|jddrt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rtd S )Nl   zV8t g}-r   rT   2   r&  r  g*@r  g(\u+@r  g33333+)rn  guessed_params
fit_paramsrt  r   r9  r=  )r  r  )rb   rh   r   r   r   rk   r   r   r6  Z
fit_resultr   r  rq   r   r  r  Znull_distribution)	r   r   r   r  r  rt  r   r   Zres3rO   rO   rP   test_params_effects  s^    
 
  
 


 z%TestGoodnessOfFit.test_params_effectsN)rB  rC  rD  rp  r}  r  r  r  r  r  r  r_   r   r   r  r  rO   rO   rO   rP   rk    s   
	


rk  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
}z6dd l}d}tj	t
|d |jdd W 5 Q R X W nB ttfk
r   d}tj	t|d |jdd W 5 Q R X Y nX d S )Nl   u!u\xD r   r   r   r   c                     s   t | |d iS )Nri   r   )r   kwargsr   rO   rP   r   E  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`.)rb   rh   r   r   r(  rk   rl   
matplotlibr_   r   r   ZplotModuleNotFoundErrorImportError)r   ry   r   r   r  r  r   rO   r  rP   test_plot_ivA  s    zTestFitResult.test_plot_ivN)rB  rC  rD  r  rO   rO   rO   rP   r  @  s   r  )N)r   r   r   )2r\   Znumpyrb   Znumpy.testingr   r  r   r   r_   Zscipyr   Zscipy.optimizer   Ztest_continuous_basicr   Z!scipy.stats._distn_infrastructurer	   Zscipy.stats._distr_paramsr
   Zscipy.statsr   rg   rd   rf   Zmle_failing_fitsZmm_failing_fitsZmm_slow_fitsrZ   rL   rQ   r   r   rE  rv   r|   r   r   r   r(  r   r   r   r   r   r   r   r   rw  rk  r  rO   rO   rO   rP   <module>   s  
                                
       
.

%1
  
	  q                                                                                                  
 "