
    -ii'                        d dl Z d dlZd dl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z   edZeedZdhZg dZ d Z!ej"        j#        ej"        $                    d e!                      ej"        $                    dddg          d                                     Z%d3dZ&d Z'd Z(d Z)ej"        $                    d e	j*        d!fe	j+        d"fg          d#             Z,d$ Z-d% Z.d& Z/ej"        $                    d' e/                      d(             Z0	 	 d4d+Z1 G d, d-          Z2g d.Z3 G d/ d0          Z4 G d1 d2          Z5dS )5    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truncparetotruncweibull_minstudentized_range)
	betaprimecrystalball	exponweibfgeninvgauss	jf_skew_tnctrecipinvgaussrel_breitwignervonmises_line)burrchichi2mielkepearson3genhalflogisticrdistparetopowerlawpowerlognorm
wrapcauchyr*   )3alphar"   r,   burr12cauchyr-   r.   r#   dgammar   dweibullr%   fatiguelifefisk
foldcauchy
genextremer   genhyperbolicgennorm	genpareto
halfcauchyinvgamma
invweibullr   r'   	johnsonsukappa3r   r   landaulevylevy_lr   
loglaplacelomaxr/   nakagamir   r(   r   r3   r5   	powernormr*   
skewcauchyttriangr   r    r   r!   )argusexponpowr$   r   r   r1   halfgennormgompertz	johnsonsbr   	kstwobignr)   r   r   r+   r6   )MMMLEr   )erlangr@   norminvgaussc               #   B   K   t           D ]\  } }| t          vr| |fV  d S N)r	   skip_fit)distnameargs     `/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/stats/tests/test_fit.pycases_test_cont_fitrb   b   sA      
 "    #8##C-       zdistname,argmethodrY   rX   c           	      J   t          t          j        dd                    }t          t          j        dd                    }| t          |         v r|sd}t	          j        |           | t          |         v r|sd}t	          j        |           t          t          |           }t          j        |ddgg          }t          j        t          j        |t          z  t          j        |j        d	z   t"                    g          d
          }t$          D ]/}	t          j                            d          }
t          j        d          5   |j        ||	|
d}|dk    r|j        t0          v rdd
i}ni } |j        |fd|i|}|dk    rEt          j        |          } |j        |fi |}d|j         d| d| }t7          ||d|           |dk    r| t8          vrd}t          j        ||f          }|d |d
fxx         dz  cc<   |d |dfxx         dz  cc<   |                    d           t          j        |          } |j        |fi |}d|j         d| d| }t7          ||d|           d d d            n# 1 swxY w Y   ||z
  }t          j        t          j        |                                           t          z  t"          g          |d <   t          j!        t          j"        |                    rtG          d!          t          j$        t          j        |          |k              r d S 1d"tK          |           d#}|d$tK          |           d#z  }|d%tK          |           d#z  }tG          d&|j         d#|z             )'NSCIPY_XFAILF)default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sizerandom_staterY   flocrd   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pytestxfail
xslow_fitsskipgetattrr   nphstackmaxvstackthresh_percentfullnumargs
thresh_min	fit_sizesrandomdefault_rngerrstatervsnamemle_use_floc0fitCensoredDatar   fail_interval_censoredcolumn_stacksortabsmeananyisnanAssertionErrorrl   str)r_   r`   rd   	run_xfail	run_xslowmsgdistfntrueargdiffthresholdfit_sizerngr   kwdsestdata1est1nicrx   data2est2difftxts                         ra   test_cont_fitr   l   s    BImU;;;<<IBImU;;;<<I<'''	' QS:f%%%i%ICUH%%FisCj)**GF29gn&<&(gfnQ.>
&K&K&M N N M  3L 3Li##D))[X&&& 	C 	C&*S(sCCCC6;-#?#?{&*S888488C *3//!vz%00400N)/N N<?N NGKN NcsCCCC83I#I#I ?C:66#q!!!T)!!!#q!!!T)!!!1%%%*H===!vz%00400F!'F F47F F?CF FccBBBB=	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C@ W} FBF388::$6$6~$E$.$0 1 1b 6"(3--   	 !6777vbfTllm344  -CLL,,,)SXX))))*SYY****DV[DDDsJKKKs   D0JJ	J	c                     t          t          |           }|                    |          dd          }t          |||d|             d S )Nrz   z poor mle fit of (loc, scale) in )atolrr   )r   r   r   r   )r   datadesiredr   dactuals         ra   _check_loc_scale_mle_fitr      sa    tAUU4[[FFG$EtEEG G G G G Grc   c                      t          j        g d          } t          d| ddgd           t          d| ddgd           d S )N)ru   {Gz?r   r   Gz?r   r          @uniformru   rt   MbP?expongp=
ף?)r   arrayr   )r   s    ra   "test_non_default_loc_scale_mle_fitr      sN    8DDDEEDYtTlDAAAWdT7OTBBBBBrc   c                  x    g d} t           j                            | d          }t          |ddgd           dS )zgh-6167)r   r   r   r   rj   rj   rj   rj   r   )rp   ri   r   r   N)r   r   r   r   )r   phats     ra   test_expon_fitr      sC    ###D;??4a?((DD1c(......rc   c                     t          j        t          j        d          t          j        d          g          } d}t	          j        t          |          5  t	          j        t                    5  t          j
                            |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N      z0Optimization converged to parameters that are...match)r   concatenatezerosonesr   raisesr
   warnsRuntimeWarningr   betar   )r   messages     ra   test_fit_errorr      s   >28B<<566D@G	xw	/	/	/  L(( 
t                                s6   B62 BB6B"	"B6%B"	&B66B:=B:zdist, params)      ?      @)
   333333?rj   c                 n   t           j                            d          }t          | d          r| j        }n| j        } | j        |d|d} ||g|R                                   }|                     ||          }| 	                    ||          }t          ||           t          ||           d S )Nig:pdfd   rm   )r   r   r   hasattrlogpdflogpmfr   sumnnlf_penalized_nnlfr   )distparamsr   logpxfxrefres1res2s           ra   test_nnlf_and_related_methodsr      s     )

	
*
*CtU &s555A6!f!!##
#C99VQD**DD#D#rc   c               #      K   h d} h d}h d}t          t          t          z             D ]}|| v st          |t                    s9d}t          j        |t
          j                            |                    V  T||v r9d}t          j        |t
          j        	                    |                    V  ||v r9d}t          j        |t
          j        
                    |                    V  |V  d S )	N>   r   rR   r   r   foldnormrM   r   	truncnormr   r   poisson_binomr    r!   >4   r%   rP   r-   r=   ricer7   binomgammarL   r2   r8   rZ   rG   r/   nbinomr3   arcsinerA   lognormrandintr   zipfianbradfordr;   rS   r   rU   rD   invgaussr0   r4   skewnormr"   	exponnormrB   r'   rV   rF   rW   rN   r>   r?   rE   rK   r6   r#   r<   rT   weibull_maxweibull_minr[   r)   >   r   r(   r,   r   r   rQ   skellamr   r   	betabinomr$   	hypergeom	trapezoid
betanbinomr   
loguniform
nhypergeom
reciprocalr&   r   r5   r@   r   r1   r*   nchypergeom_fishernchypergeom_walleniusztested separatelyreasonmarkstoo slow (>= 0.25s)too slow (>= 1.0s))dictr   r	   
isinstancer   r   parammarkr   slowxslow)skip_basic_fitslow_basic_fitxslow_basic_fitr   r  s        ra   cases_test_fit_mler     s>     ' ' 'N! ! !N2 2 2O \H,--  >!!D#)>)>!(F,t6;+;+;6+;+J+JKKKKKKK^##*F,t6;+;+;6+;+J+JKKKKKKK_$$)F,t6;+<+<F+<+K+KLLLLLLLJJJJ rc   c               #     K   h d} h d}h d}dh}t          t          t          z             D ]}|| v st          |t                    s9d}t          j        |t
          j                            |                    V  U||v r9d}t          j        |t
          j        	                    |                    V  ||v r9d	}t          j        |t
          j        
                    |                    V  ||v r9t
          j                            d
          }t          j        ||          V  |V  d S )N>   rR   r   r   r2   r   r4   r   r   r   r   r&   r   r   r[   r@   r   r!   >2   rP   r-   r.   r=   waldr7   r   rL   anglitrZ   rG   r3   rQ   r   maxwellr   r   r   r   r;   rS   r   r   rU   loggammar   r   r$   rB   r   rF   rW   rN   r>   r?   rE   rK   r   r   r6   r#   r<   genlogisticr   r   r   semicircularr)   r1   laplace_asymmetric>!   r%   r   r(   r   r,   r   r   rR   r8   r:   r   r/   rA   r   rD   r   rM   r0   r"   r'   rV   r   r   r   r  rT   r5   r+   r   r*   r    r  r  r   zFails. Oh well.r  r  r  r	  zignore::RuntimeWarning)r
  r   r	   r  r   r   r  r  r   r  r  filterwarnings)r  r  r  warns_basic_fitr   r  r  s          ra   cases_test_fit_mser    s     
 
 
N! ! !N&	( 	( 	(O !kO\H,--  >!!D#)>)>!&F,t6;+;+;6+;+J+JKKKKKKK^##*F,t6;+;+;6+;+J+JKKKKKKK_$$)F,t6;+<+<F+<+K+KLLLLLLL_$$;--.FGGD,t40000000JJJJ rc   c               #      K   t          t                                                    D ]%\  } }t          | t                    r| dv r| |fV  &d S )N>   r)   r!   )r
  r	   itemsr  r   )r_   shapess     ra   cases_test_fitstartr"  X  sk       NN0022  &8S)) 	BBB	 rc   zdistname, shapesc                 F   t          t          |           }t          j                            d          }|                    d          }t          j        dd          5  |                    |          }d d d            n# 1 swxY w Y    |j        |d d          sJ d S )NiV r   rk   )invaliddividerz   )r   r   r   r   r   r   	_fitstart	_argcheck)r_   r!  r   r   r   guesss         ra   test_fitstartr)  `  s    5(##D
)

	
*
*C::b>>D	Xh	7	7	7 % %t$$% % % % % % % % % % % % % % % 4>5":&&&&&&s    BB	BHz>r   c                     t          | |          } |||          } |||          }	||	k     s%t          j                            ||	||           d S d S )N)rq   r   )r   r   testingr   )
r   r   params1params0rq   r   	nlff_namenlffnlff1nlff0s
             ra   assert_nlff_less_or_closer3  l  sh    4##DD$ED$EEMM

""5%d"FFFFF Mrc   c                      e Zd Zej        ZdZej        	                    e          Z
ej                            ddde
          ZddgZdddZd	Zd
ZeedZdddZd Zd Zd Zd Zd)dZej                            d e                      d             Zej                            d e                      d             Zej        j        d             Z ej                            dd          d             Z!ej        j"        d             Z#d Z$d Z%ej        j        d             Z&d Z'ej        j        d              Z(d! Z)d" Z*d# Z+d$ Z,ej        j"        d%             Z-d& Z.d' Z/d(S )*TestFitl   Va   r   r   rm   r   r   r   r   npry   {Gz?)r   rq   r   r   c                    t          |d|i|S Nr   r   )selfr   argsr   s       ra   optzTestFit.opt  s    %t=====rc   c                     d}t          j        t          |          5  t          j        d| j        | j                   d d d            d S # 1 swxY w Y   d S )Nz `dist` must be an instance of...r   r   )r   r   
ValueErrorr   r   r   shape_bounds_ar@  r   s     ra   test_dist_ivzTestFit.test_dist_iv  s    4]:W555 	: 	:Ib$)T%8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   !AAAc                    d}t          j        t          |          5  t          j        | j        g dg| j                   d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        | j        dddt          j        g| j                   d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        | j        dddt          j	        g| j                   d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        | j        g d| j                   d d d            d S # 1 swxY w Y   d S )	Nz'`data` must be exactly one-dimensional.r   r   rj      z.All elements of `data` must be finite numbers.r   rj   rJ  )123)
r   r   rD  r   r   r   rE  r   naninfrF  s     ra   test_data_ivzTestFit.test_data_iv  s   ;]:W555 	C 	CIdi)))d.ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C C]:W555 	I 	IIdi!Q26!2D4GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I]:W555 	I 	IIdi!Q26!2D4GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I]:W555 	G 	GIdi$2EFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GsG   $AAA6/B11B58B5/DDD8#E((E,/E,c                    d}dddd}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddg}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d	}dd
g}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   ddg}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}dg}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}g d}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddd}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddg}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddg}t          j        t          |          5  t          j        | j        | j        |           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        | j        | j                   d d d            n# 1 swxY w Y   t          j
         t          j
        fdg}t          j        t          |          5  t          j        | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nz1Bounds provided for the following unrecognized...r7  r8  r   r   r:  r;  rK  r   z6Each element of a `bounds` sequence must be a tuple...)r   r   rJ  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...)r7  r7  r7  r7  z.There are no values for `p` on the interval...)r   r   r9  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   r   r   r   r   rD  r   rO  )r@  r   shape_boundsboundss       ra   test_bounds_ivzTestFit.test_bounds_iv  s^   E$6@@\.888 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: K"F+]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: K"K0]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:1v]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: Ly]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: P555]:W555 	4 	4IdiF333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 C$622]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: C(]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: K"F+]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: E]:W555 	, 	,Idi+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,&"&)62]:W555 	: 	:IdiL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   !AAA=!B**B.1B.!DD
D-!EE!E!F22F69F6!HHH8!I%%I),I)!J>>KK*!LLL? M++M/2M/,!OO!Oc                    d}dddd}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}dd	d
}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   ddg}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   ddgg}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}dg}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}g d}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddd
}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}g d}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}ddd
}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            n# 1 swxY w Y   d}g d}t          j        t          |          5  t          j        | j        | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nz2Guesses provided for the following unrecognized...r   r      rS  r   )r(  z+Each element of `guess` must be a scalar...hir9  r%   rj   z-A `guess` sequence must contain at least 2...z1A `guess` sequence may not contain more than 3...)r   rj   rJ     zCGuess for parameter `n` rounded.*|Guess for parameter `p` clipped.*g      @g      z$Guess for parameter `loc` rounded...)r6  r   r   z"Guess for parameter `p` clipped...r6  z$Guess for parameter `loc` clipped...)r6  r   r   )
r   r   r   r   r   r   r   shape_bounds_dr   rD  )r@  r   r(  s      ra   test_guess_ivzTestFit.test_guess_iv  s   Fc,,\.888 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N @d##]:W555 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	NC]:W555 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	NQ]:W555 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N B]:W555 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N F]:W555 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N X%%\.888 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 9\.888 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 7d##\.888 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 9\.888 	N 	NIdiD,?uMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   (AAA(B99B= B=#(DDD(E66E:=E:!(GGG(H55H9<H9"(JJJ(K66K:=K:#(MMM(N88N<?N<c                 H   d}t          t          t          z             }t          j                            | j                  }t          t          |          }t          j	        ||                   }t          j
        t          |          dz   dft          j                  }|dt          j        |          z  z  |d ddf<   |dt          j        |          z  z  |d ddf<   d|d<   d	|d
<    |j        |d          }	 |j        |d
          }
t          ||                   |	|
gz   }t          |dd          r9|d d
         }t          j        |	          |d
<    |j        |||d}|d d
         }t          |dd          r |j        |||d}t%          j                    5  t%          j        ddt*                     t          j        ||||| j                  }d d d            n# 1 swxY w Y   ddd}||         }t1          |||j        |fi | j        d|i d S )Nr   rj   )dtypeg      $@rz   r   r   rR  )gؗҜ<r   pmfFrm   r   rk   zoverflow encounteredrd   	optimizerr   _penalized_nlpsfmlemser/  )r
  r	   r   r   r   r   seedr   r   r   emptylenfloat64signr   listfloorr   warningscatch_warningsr  r   r   rB  r3  r   tols)r@  	dist_namerd   r   N	dist_datar   r!  rU  locscaler   r   res
nlff_namesr/  s                   ra   basic_fit_testzTestFit.basic_fit_test  s   L011	i##DI..ui(()I.//3v;;?A.bjAAARWV__ 44ssAvRWV__ 44ssAvr
 r
ck6":&VBZ(9Y'((C<74&& 	!crc(ChsmmCG48Sqs;;;DCRC[F4&& 	<48Sqs;;;D$&& 	0 	0#H.DnUUU)D$v&*h0 0 0C	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
 $,>??
v&	!$cj# 	7 	7 	7 	7,5	7 	7 	7 	7 	7 	7s   &:G,,G03G0rq  c                 6    |                      |dd           d S )Nre  r6  r=  rx  r@  rq  s     ra   test_basic_fit_mlezTestFit.test_basic_fit_mle  #    Iu!44444rc   c                 6    |                      |dd           d S )Nrf  rj   r=  rz  r{  s     ra   test_basic_fit_msezTestFit.test_basic_fit_mse  r}  rc   c                    d}t           j                            | j                  }t          j        }d} |j        |||d}ddd}t	          j        |||d| j                  }t          |||j
        |fdd	i| j         d S )
Nr   )ri   r   rm   皙?r   rt  ru  rf  ra  r/  rc  )r   r   r   rg  r   r   r   r   rB  r3  r   rp  r@  rr  r   r   r!  r   rT  rv  s           ra   test_arcsinezTestFit.test_arcsine!  s    
 i##DI..}txac:::(9==idL$(SSS!$cj& 	M 	M,>	MBF)	M 	M 	M 	M 	Mrc   rd   rd  c                 $   d}t           j                            | j                  }t          j        }d} |j        |||d}dddd}t	          j        |||| j        |          }ddd	|         }	t          |||j
        |fi | j        d
|	i d S )Nr   )ri   r         @rm   r  )r-   rt  ru  )rb  rd   r   rc  rd  r/  )r   r   r   rg  r   rR   r   r   rB  r3  r   rp  )
r@  rd   rr  r   r   r!  r   rT  rv  r/  s
             ra   
test_arguszTestFit.test_argus0  s    
 i##DI..{txac:::(YOOidLDHVTTT"+=>>vF	!$cj& 	7 	7DI 	7 	7,5	7 	7 	7 	7 	7 	7rc   c                    d}t           j                            | j                  }t          j        }d} |j        |||d}ddddd}t	          j        |||d| j                  }t          |||j
        |fdd	i| j         d S )
Nr   )gdsz@g@e?ri   r   rm   r  )abrt  ru  re  ra  r/  r   )r   r   r   rg  r   r   r   r   rB  r3  r   rp  r  s           ra   	test_betazTestFit.test_beta@  s    
 i##DI..zBtxac:::&I(9> >idL$(SSS!$cj& 	A 	A,2	A6:i	A 	A 	A 	A 	Arc   c                    d}t           j                            | j                  }t          j        }d} |j        |||d}dddd}t	          j        |||| j                  }t          |||j
        |fi | j         d S )Nr   )g);?r   r  rm   r  )crt  ru  rb  )r   r   r   rg  r   r   r   r   rB  r3  r   rp  r  s           ra   test_foldnormzTestFit.test_foldnormP  s     i##DI..~,txac:::&y9MMidLDHEEE!$cj&NNDINNNNNrc   c                 
   d}t           j                            | j                  }t          j        }d} |j        |||d}dddd}t	          j        |||d| j                  }t          |||j
        |fdd	i| j         d S )
Nr   )g7h@ri   r   rm   r  )nurt  ru  re  ra  r/  r   )r   r   r   rg  r   rM   r   r   rB  r3  r   rp  r  s           ra   test_nakagamizTestFit.test_nakagami^  s     i##DI..~-txac:::&y9MMidL$(SSS!$cj& 	A 	A,2	A6:i	A 	A 	A 	A 	Arc   c                 
   d}t           j                            | j                  }t          j        }d} |j        |||d}dddd}t	          j        |||d| j                  }t          |||j
        |fdd	i| j         d S )
Nr   )gk?ri   r   rm   r  )r  rt  ru  rf  ra  r/  rc  )r   r   r   rg  r   r4   r   r   rB  r3  r   rp  r  s           ra   test_powerlawzTestFit.test_powerlawl  s    
 i##DI..~-txac:::&y9MMidL$(SSS!$cj& 	M 	M,>	MBF)	M 	M 	M 	M 	Mrc   c                    d}t           j                            | j                  }t          j        }d} |j        |||d}dgdz  }t	          j        |||| j                  }t          |||j
        |fi | j         d S )Nr   )g?g333333@gffffff@gffffff@rm   r  rZ  r  )r   r   r   rg  r   r   r   r   rB  r3  r   rp  r  s           ra   test_truncparetozTestFit.test_truncpareto{  s     i##DI.. %txac:::!{1}idLDHEEE!$cj&NNDINNNNNrc   c                    d}t           j                            | j                  }t          j        }d} |j        |||d}dgdz  }t	          j        |||| j                  }t          |||j
        |fi | j         d S )Nr   )r   r   g      ?r   r  rm   r  r6  r  )r   r   r   rg  r   r    r   r   rB  r3  r   rp  r  s           ra   test_truncweibull_minzTestFit.test_truncweibull_min  s    
 i##DI..%*txac:::!{1}idLDHEEE!$cj&NNDINNNNNrc   c                 
   d}t           j                            | j                  }t          j        }d\  }}}|                    |||||          }dt          j        ddg          i}t	          j        |||| j	                  }	t          |	j        |||ffi | j         t          j        }d\  }}|                    ||||          }t	          j        ||| j	                  }	t          |	j        ||ffi | j         d S )	Nr   r   ?r   rt  rn   ro   r:  r      r  )gY.?r   )r   r   r   rg  r   r   r   r   r   rB  r   r   rp  	bernoulli)
r@  rr  r   r   r:  r;  rt  r   rT  rv  s
             ra   test_missing_shape_boundsz!TestFit.test_missing_shape_bounds  s   
 i##DI..{	1cxx1#ACx@@RXq"g../idLDHEEE
Q3K==49===3xxsx==iddh777
QH::	:::::rc   c                    d}t           j                            | j                  }t          j        }d\  }}|                    |||          }d}d|i}t	          j        |||| j                  }	t          |	j
        ||ffi | j         d\  }}|                    |||          }d	}
d
|
i}t	          j        |||| j                  }	t          |	j
        ||ffi | j         t          j        }d\  }}|                    ||||          }||
d}t	          j        |||| j                  }	t          |	j
        ||ffi | j         d S )Nr   )      ?r   r  )r   r6  rt  r  )r   r   )ru  rn   ro   )r<  r6  ru  r  r   rt  ru  rn   ro   r  )r   r   r   rg  r   normr   r   rB  r   r   rp  )r@  rr  r   r   rt  ru  r   
loc_boundsrU  rv  scale_boundss              ra   test_fit_only_loc_scalezTestFit.test_fit_only_loc_scale  sq   i##DI..z
UxxCacx::
$idFdh???
S%L>>DI>>> 
Uxxe!#x>> <(idFdh???
S%L>>DI>>> z
UxxCu13xGG#l;;idFdh???
S%L>>DI>>>>>rc   c                 D   d}t           j                            | j                  }t          j        }d\  }}|                    ||||          }t	          j        ||          }t          |j	        dfi | j
         ||f||fd}t	          j        |||          }t          |j	        ||ffi | j
         t          j        }d\  }	}
}|                    |	|
|||          }dd	d
}t	          j        |||| j                  }t          |j	        |	|
|ffi | j
         d S )Nr   r  r  r8  r  r  r  )r   r  )r  r  r9  r  )r   r   r   rg  r   r  r   r   r   r   rp  r   rB  )r@  rr  r   r   rt  ru  r   rv  rU  r:  r;  rT  s               ra   test_everything_fixedzTestFit.test_everything_fixed  s>   i##DI..z
UxxCu13xGG id##
F88di888 suen==idF++
S%L>>DI>>> {	1cxx1#ACx@@$<88idLDHEEE
Q3K==49=====rc   c                 D   d}t           j                            | j                  }t          j        }d} |j        |||d}|                                dk    sJ g d}t	          j        |||          }d}|j	        
                    |          sJ |j        du sJ d S )Nr   )r6  r   rm   r   )r      r8  )r   r   z3Optimization converged to parameter values that areF)r   r   r   rg  r   r   r   minr   r   
startswithsuccess)	r@  rr  r   r   r!  r   rU  rv  r   s	            ra   test_failurezTestFit.test_failure  s    i##DI..|txac:::xxzzQ---idF++G{%%g.....{e######rc   c                 l   d}t           j                            d          }t          j        }d}g d} |j        |||d}t          j        |||| j                  }t          j        |j	        |fi | j
        rJ t          j        ||||| j                  }t          |j	        |fi | j
         d S )Ni  l   ^s )r        r   ))rj      )ffffff?F   )g333333?x   rR  rm   r  )r(  rb  )r   r   r   r   r   r   r   rB  allcloser   rp  r   )r@  rr  r   r   r   rU  r   rv  s           ra   
test_guesszTestFit.test_guess  s     i##L11;;;txac:::idFdh???;sz6??TY?????idF&DHMMM
F88di88888rc   c                     ddg}t           j        }ddd}t          j        |||d          }t          |j        j        dd	
           t          j        |||d          }t          |j        j        dd	
           d S )Nrj   rZ  )r   r   :0yE>r   r  re  rU  rd   rJ  r   r   rf  gRQ@)r   r   r   r   r   ru  )r@  r   r   rU  res_mleres_mses         ra   test_mse_accuracy_1zTestFit.test_mse_accuracy_1  s     1v{*55)D$veDDD,ad;;;;)D$veDDD,e$??????rc   c                    t           j                            d          }t          j        }d} |dd                              ||          }ddd}t          j        |||d	
          }t          j        |          }||d         z  |d         z
  |dz
  z  }||d         z  |d         z
  |dz
  z  }	||	|z
  f}
t          |j	        |
d           d S )Nl   4gcvD r   rJ     rm   rR  r  r  rf  r  r   r_  r   -C6?rq   )
r   r   r   r   r   r   r   r   r   r   )r@  r   r   r:  r   rU  rv  r   r  r  r   s              ra   test_mse_accuracy_2zTestFit.test_mse_accuracy_2  s     i##$788}tAqzz~~13~77 :66id6%@@@ GDMMqtVae^a!e$quWqt^a!e$1f
Cd333333rc   N)r   )0__name__
__module____qualname__r   r   r   rg  r   r   r   r   r   r   rE  r[  r   rq   rp  rB  rG  rP  rV  r\  rx  r   r  parametrizer  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rc   ra   r5  r5  u  s       ;DD
)


%
%C;??1c#?>>Dv&N"00NDD$''D > > > > >: : :
G G G1: 1: 1:f-N -N -N^ 7  7  7  7D [[*<*<*>*>??5 5 @?5 [[*<*<*>*>??5 5 @?5 [M M M [X~667 7 767 [A A AO O OA A A [M M MO O O [O O O; ; ;*? ? ?:> > >2$ $ $  [9 9 9"	@ 	@ 	@4 4 4 4 4rc   r5  )xA   =   Q   X   E   Y   7   T   V   r  G   r  r  r  N   C   `   B   I   K   ;   r  r  ?   O   L   r  U   W   r  P   r  r  r  r  r  r  r  @   r  r  M   r  r  r  r  r  \   Z   r  r  r  r  r  :   r  r  r  r  R   r  r  6   r  9   r  r  r  J   r  r  r  r  r  r  D   r  r  S   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ]   r  r  r  r  r  r  <   r  r  r  r  r  r  r  r  r  r  r  r  r  H   c                   V   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej        j        d	             Zd
 Zd Zej                            ddg dfdg dfdg dfg          d             Zej        j        ej                            dg d          d                         Zd Zd ZdS )TestGoodnessOfFitc                    t           j        }g d}d}t          j        t          |          5  t          t          j                    |           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          |g dg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ||d	
           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          ||d           d d d            d S # 1 swxY w Y   d S )NrI  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 sequenceherringr=  )r   r  r   r   	TypeErrorr   rD  )r@  r   r   r   s       ra   test_gof_ivzTestGoodnessOfFit.test_gof_iv0  s   zIIC]9G444 	- 	-EJLL!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- G]:W555 	/ 	/D999+...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 2]:W555 	5 	5D!t4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 7]9G444 	: 	:D!&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 9]9G444 	4 	4D!3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4sY   "AA #A B$$B(+B(C++C/2C/D22D69D6E::E>E>c                    t           j                            d          }t          }t          j        |          t          j        |d          d}t          t          j        ||d|          }t          j	        |t          j        di |j
        d          }t          |j        |j                   t          |j        |j        d	
           d S )Nl   H]Vh1 r   ddofr  ksknown_paramsr  r   exactrd   {Gzt?r   r  )r   r   r   
examgradesr   stdr   r   r  kstestcdfr   r  pvaluer@  r   r   r  rv  r   s         ra   test_against_ksz!TestGoodnessOfFit.test_against_ksH  s    i##$788!wqzzBF114E4E4EFFej!,(,#7 7 7l1ej88<88<WMMMs}555
CJT::::::rc   c                    t           j                            d          }t          }t	          t
          j        |d|          }t          j        |          t          j        |d          d}t          j	        |t          j        di |j
        d          }t          |j        |j                   t          |j        d	d
           d S )Nl   8<*}p~ r  )r  ro   r   r  r  r   r  g5;Nѡ?r  r   r  )r   r   r   r  r   r   r  r   r  r  r  r   r  r  r@  r   r   rv  r  r   s         ra   test_against_lillieforsz)TestGoodnessOfFit.test_against_lillieforsR  s    i##$788ej!t#NNN!wqzzBF114E4E4EFFl1ej88<88<WMMMs}555
F666666rc   c                    t           j                            d          }t          }t          j        |          t          j        |d          d}t          t          j        ||d|          }t          j	        |t          j        d	i |j
                  }t          |j        |j                   t          |j        |j        d           d S )
Nl   vj!$'C r   r  r  cvmr  r  r   r  )r   r   r   r  r   r  r   r   r  cramervonmisesr  r   r  r  r  s         ra   test_against_cvmz"TestGoodnessOfFit.test_against_cvm\  s    i##$788!wqzzBF114E4E4EFFej!,(-38 8 8"1ej&@&@<&@&@&DEEs}555
CJT::::::rc   c                    t           j                            d          }t          j        dd          }ddd}t	          t
          j        ||d|          }t          |j        d	           t          |j	        d
d           d S )Nl   jHJE3 r   e   gF6F@r  r  adr  gV-@ry   r  r   
r   r   r   aranger   r   r  r   r  r  r@  r   r   r  rv  s        ra   test_against_anderson_case_0z.TestGoodnessOfFit.test_against_anderson_case_0f  s    i##$788Ia02>>ej!,(,#7 7 7u---
Dt444444rc   c                 
   t           j                            d          }t          j        dd          }ddi}t	          t
          j        ||d|          }t          |j        d           t          |j	        d	d
           d S )Nl   H'b4:/ r   r  ru  g{U=@r  r  guV?r  r  r   r  r  s        ra   test_against_anderson_case_1z.TestGoodnessOfFit.test_against_anderson_case_1q  s    i##$788Ia!34ej!,(,#7 7 7u---
Cd333333rc   c                 
   t           j                            d          }t          j        dd          }ddi}t	          t
          j        ||d|          }t          |j        d           t          |j	        d	d
           d S )Nl   P^QqPr   r  rt  gfHF@r  r  gZd;@皙?r  r   r  r  s        ra   test_against_anderson_case_2z.TestGoodnessOfFit.test_against_anderson_case_2|  s    i##$677Ia/0ej!,(,#7 7 7u---
E555555rc   c                    t           j                            d          }t          j                            dddd|          }t          t          j        |d|          }t          |j	        d	           t          |j
        d
d           d S )Nl   iUn gBQ_ *?r   rj   r   r  r  r  r   gS?g333333?r  r   )r   r   r   r   r   r   r   r  r   r  r  )r@  r   r   rv  s       ra   test_against_anderson_case_3z.TestGoodnessOfFit.test_against_anderson_case_3  s    i##$788N1q,/  1 1ej!tEEEu---
Dt444444rc   c                 p   t           j                            d          }t          j        ddd                              d|          }t          t          j        |d|	          }t          j        |d
d          }t          |j
        |j
                   t          |j        |j        d           d S )Nl   /JG gQ8?r   r  r  r   rm   r  r  gumbel_rinterpolate)r   rd   r  r   )r   r   r   r   r?   r   r   r!  andersonr   r  r  )r@  r   r   rv  r   s        ra   test_against_anderson_gumbel_rz0TestGoodnessOfFit.test_against_anderson_gumbel_r  s    i##$4551s#&( ( ((+C(H(H 	
ena4SIIInQZFFFs}555
CJT::::::rc   c                 R   t           j                            d          }g d}ddd}t          j        t          j        ||d|          }t          |j        dd	
           d|j        cxk     rdk     sn J t          |j        dd           t          |j        dd           d S )Nl   fKW7/z )r  r      rz   r6  r   r   r   r  fillibenr  gG=D;?r  r   r   ?gF8y?gh㈵>r  gffffff?Mb`?)	r   r   r   r   r   r  r   r  r  )r@  r   yr  rv  s        ra   test_against_filliben_normz,TestGoodnessOfFit.test_against_filliben_norm  s    i##$788### 1--#EJ.8cC C C
 	wT::::cj&&&&3&&&&&& 	'7dCCCC
F666666rc   c                 @   t           j                            d          }|                    ddd          }t	          j        t          j        |d|          }dd	d
}t	          j        t          j        ||d|          }t          |j        |j        d           d S )Nl   1gDF3 r   r   r   )rt  ru  rn   r(  r  r   r   r  r  gV瞯<r  )	r   r   r   normalr   r   r  r   r  r  s         ra   test_filliben_propertyz(TestGoodnessOfFit.test_filliben_property  s    i##$788JJ2SsJ33#EJ.8cC C C 1--#EJ.8cC C Cs}5AAAAAArc   case   )gV-?gCl?ffffff?g-?gx?2   )g㥛 ?gzG?gv?$C?g1Zd?_   )r4  gS?g~jt?gZd;O?gS?c                 R   t           j                            d          }|\  }}|                    |          }ddd}t          j        t          j        ||d|          }t          j        g d          }t          j        |j        |dz            }t          ||d	
           d S )Nl   +^8r   r   r  r(  r  )r  r<  r  ry   r  r   r*  r   )
r   r   r   r   r   r  r   scoreatpercentilenull_distributionr   )	r@  r0  r   r:  r   r   r  rv  percentiless	            ra    test_against_filliben_norm_tablez2TestGoodnessOfFit.test_against_filliben_norm_table  s    
 i##$6773JJqMM 1--#EJ.8cC C Ch>>>??%c&;[_MMSt,,,,,,rc   ))r6  g?g;On?)r  gǄ?g-?)r  g-hC/?g\ Ac?c                    |\  }}}t           j                            d          }|                    |          }t	          j        t          j        |d|          }t          |j        |d           t          |j	        |d           d S )	Nl   vTV_ )rn   r(  r  r  r  gQ?r   )
r   r   r   r.  r   r   rayleighr   r  r  )r@  r0  r:  ref_statistic
ref_pvaluer   r   rv  s           ra   test_against_ppccz#TestGoodnessOfFit.test_against_ppcc  s     (,$=*i##$788JJAJ#ENA(+- - -}4@@@@
JV<<<<<<rc   c           	      $   t           j                            d          }t          j                            dddd|          }ddi}d	d
i}ddi}t           j                            d          }t          t          j        |d||||          }t          j        |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||||          }t          j        |j	        j
        j        |j	        j
        j        d          rJ t          j        |j        |j        d          rJ t          |j	        j
        j        d
           t          |j	        j
        j        d           dd
d}t           j                            d          }t          t          j        |d||||          }t          |j	        j
        j        d           t          |j	        j
        j        d
           t          |j	        j
        j        d           t          j        |j        |j                  rJ d S )N   zV8t g}-r   rj   r3  r  r  g*@ru  g(\u+@rt  g33333+)r  guessed_params
fit_paramsr  r   r  r  )r  ru  )r   r   r   r   r   r   r   r   r  
fit_resultr   r  r   ru  rt  r8  )	r@  r   r   rB  rC  r  r   r   res3s	            ra   test_params_effectsz%TestGoodnessOfFit.test_params_effects  s    i##$788N1q,/  1 1
 tu%
vi##$788u0!!.<*4,8cC C C ;t57>>>>>T_+15999T_+/888 qi##$788u0!!.<*4,8cC C C ;t57#57dD D D 	D 	D 	D;t5#5DB B B 	B 	B 	BT_+15999T_+/888
  %00
i##$788u0!!.<*4,8cC C C 	T_+-t444T_+15999T_+/888;t5t7MNNNNNNNrc   c                 6   d }t           j                            d          }t          j                            d|          }t          t          j        |ddd||          }g d	}g d
}t          j        |j        |          }t          ||d           d S )Nc                    t          j        ||          }|                     |          }t          j        ||dd          }t          j        |dz  |          S )Nrv   r   r   )rw   prependappendrj   )r   r   r  r   r   )r   r   rw   r   r+  r   s         ra   	greenwoodz:TestGoodnessOfFit.test_custom_statistic.<locals>.greenwood  sV    4(((AAa:::A6!q&t,,,,rc   rA  r6  rm   r   r   r  r  )r<  ry   r  g?r   g?r   g333333?r  g?r)  r2  rt   )g҈?gxܙ	?g&)?gW>?gR?gEկt><?gw-?gL1=B?gi?g1cg?gV(?g?Qٰ?ghsۄ?r  r   )
r   r   r   r   r   r   r   quantiler8  r   )r@  rK  r   r   resultr;  exact_quantilessimulated_quantiless           ra   test_custom_statisticz'TestGoodnessOfFit.test_custom_statistic  s    	- 	- 	- i##$788{AC88 d67!.D.D+4#? ? ? EDDB B B !k&*BAFF+_5IIIIIIrc   N)r  r  r  r  r	  r  r  r  r  r  r  r   r  r  r$  r,  r/  r  r:  r?  rF  rP  r  rc   ra   r  r  .  s       4 4 40; ; ;7 7 7; ; ;	5 	5 	5	4 	4 	4	6 	6 	65 5 5 [; ; ;7 7 7.	B 	B 	B [Vr+I+I+I&J')+I+I+I&J')+I+I+I&J&L M M
- 
-M M
- [[V &D &D &D E E= =E E =0O 0O 0OdJ J J J Jrc   r  c                       e Zd Zd ZdS )TestFitResultc                 N   t           j                            d          t          j                            ddd          }fd}ddg}t          j        t          j        |||	          }	 dd l}d
}t          j	        t          |          5  |                    d           d d d            d S # 1 swxY w Y   d S # t          t          f$ rQ d}t          j	        t          |          5  |                    d           d d d            Y d S # 1 swxY w Y   Y d S w xY w)Nl   u!u\xD r   r   r   rm   c                  $    t          | i |diS r?  r   )rA  kwargsr   s     ra   rb  z-TestFitResult.test_plot_iv.<locals>.optimizer7  s!    )4C6CCsCCCCrc   r  r8  r  z!`plot_type` must be one of \{'...r   llama)	plot_typez2matplotlib must be installed to use method `plot`.)r   r   r   r   r  r   r   
matplotlibr   r   rD  plotModuleNotFoundErrorImportError)r@  r   rb  rU  rv  rX  r   r   s          @ra   test_plot_ivzTestFitResult.test_plot_iv3  s   i##$788z~~a3~??	D 	D 	D 	D 	D 6"i
D&IFFF	,:Gz999 , ,7+++, , , , , , , , , , , , , , , , , ,#[1 	, 	, 	,KG2'BBB , ,7+++, , , , , , , , , , , , , , , , , , , ,	,sZ   0!C B5(C 5B99C <B9=C .D$0DD$D	D$D	D$#D$N)r  r  r  r\  r  rc   ra   rR  rR  2  s#        , , , , ,rc   rR  r]   )r*  r   r   )6r}   rn  numpyr   numpy.testingr   r   r   scipyr   scipy.optimizer   test_continuous_basicr	   !scipy.stats._distn_infrastructurer
   scipy.stats._distr_paramsr   scipy.statsr   r   r   r   mle_failing_fitsmle_Xslow_fitsr   mm_failing_fitsmm_XXslow_fitsmm_Xslow_fitsr   r   r   r^   rb   r  r  r  r   r   r   r   r   r  r   r   r  r  r"  r)  r3  r5  r  r  rR  r  rc   ra   <module>rj     s   				      7 7 7 7 7 7 7 7        1 1 1 1 1 1 + + + + + + 6 6 6 6 6 6 2 2 2 2 2 2 ' ' ' ' ' '  	
   *# # #  
( 
( 
(= = = %6?OPP!.99
'         )<)<)>)>??E4=11HL HL 21 @? HLVG G G GC C C/ / /    :z2 ;578 8 8 8 , , ,^= = =@   +-@-@-B-BCC' ' DC' MN(.G G G Gk4 k4 k4 k4 k4 k4 k4 k4^. . .
BJ BJ BJ BJ BJ BJ BJ BJH, , , , , , , , , ,rc   