U
    Ãmœd  ã                   @   s†  d Z ddlZddlmZ ddlmZ ddlmZ ddd	iiZ	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zi Zg Zg Zg Zg Zdd„ Zdd„ Zedk�r‚eƒ  dd„ e ¡ D ƒZdd„ e ¡ D ƒZd d„ e ¡ D ƒZd!d„ e ¡ D ƒZdd"lmZ e eƒdk�r(e!d#ƒ e!eed$d%d&gd'�ƒ e!d(ƒ e!eed$d%d&gd'�ƒ e!d)ƒ e!eed$d%d&gd'�ƒ e!d*ƒ e!eed$d%d&gd'�ƒ dS )+z™script to test expect and moments in distributions.stats method

not written as a test, prints results, renamed to prevent test runner from running it


é    N)Ústats©Ú	expect_v2é   )ÚdistcontZncfZubiè  c                 C   s<   | \}}}}t  ||d ¡}t  ||d ¡d }||||fS )ú>convert central moments to mean, variance, skew, kurtosis
    g      ø?g       @g      @)ÚnpÚdivide)ÚargsÚmcÚmc2Úmc3Úmc4ÚskewÚkurt© r   ún/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/sandbox/distributions/tests/check_moments.pyÚmc2mvsk   s    r   c           	      C   sl   | \}}}}|}|||  }|d| | |d   }|d| | d| | |  |d   }t ||||fƒS )r   é   é   é   )r   )	r
   ZmncÚmnc2Úmnc3Úmnc4r   r   r   r   r   r   r   Úmnc2mvsk   s    (r   c                 C   s   dS )Ng      ð?r   ©Úxr   r   r   Úmom_nc0&   s    r   c                 C   s   | S ©Nr   r   r   r   r   Úmom_nc1)   s    r   c                 C   s   | |  S r   r   r   r   r   r   Úmom_nc2,   s    r    c                 C   s   | |  |  S r   r   r   r   r   r   Úmom_nc3/   s    r!   c                 C   s   t  | d¡S )Nr   )r   Úpowerr   r   r   r   Úmom_nc42   s    r#   c                     sü  t d d … D �]è\} }tt| ƒ‰ ˆ j|tdd�Ž\}}}}t ||||g¡}t |¡}| ¡ dk rlt 	| ¡ t
| ƒ ˆ j}‡ fdd„}t | i ¡}	|tfd|i|	—Ž}
|f d|i|	—Ž}|tfd|i|	—Ž}|tfd|i|	—Ž}|tfd|i|	—Ž}|f |ddd	œ|	—Ž}zt||||fƒ\}}}}W nH   t
d
|||||ƒ tjgd \}}}}|jdk�rjt 	| ¡ Y nX t ||||g¡}|| ||  }t
||dd|   ƒ t |¡dk�rÚt t |¡¡dk�rÚt 	| ¡ n
t 	| ¡ |
||||gt| < qd S )NÚmvsk©Zmomentsr   c                     s   t ˆ f| ž|ŽS r   r   )r
   Úkwds©Zdistfnr   r   Ú<lambda>P   ó    z"check_cont_basic.<locals>.<lambda>r
   r   é   )r
   ÚlocÚscaleÚ	exceptionr   gü©ñÒMbP?)r   Úgetattrr   Údictr   ÚarrayÚisfiniteÚsumÚdistnonfiniteÚappendÚprintÚexpectÚspecialcasesÚgetr   r    r!   r#   r   ÚnanÚsizeÚdistexÚmaxÚabsÚdistlowÚdistokÚres)ÚdistnameZdistargsÚmÚvÚsÚkÚstÚmaskr6   Zspecial_kwdsZmnc0Zmnc1r   r   r   Zmnc1_lcÚmeÚveÚseZkeZemÚdiffr   r'   r   Úcheck_cont_basic;   s>    


&
rL   c                  C   sÌ   ddl m}  d}| tjjdddd�|dd	� t d
g¡}t ddg¡}t ddg¡}t dddg¡}d}| ¡ }||t ddg¡   ¡ }||t ddg¡   ¡ }	t dddg¡ }
}t|||	|
fƒ}dS )zÉtest for incorrect kurtosis of nct

    D. Hogben, R. S. Pinkham, M. B. Wilk: The Moments of the Non-Central
    t-DistributionAuthor(s): Biometrika, Vol. 48, No. 3/4 (Dec., 1961),
    pp. 465-468
    r   )Úassert_almost_equal)ç‚V`ÈêVñ?gsõ¸o5õ?g*¬ÿs˜Ù?g a³Ãÿó?é
   r   r$   r%   r   )ÚdecimalrN   g8÷W�ûV³?g      ô?g¶úEd³~ž?g×lå%ÿ“â?gu*'�È¥?gÍä›mnÌò?g      @r*   r   N)	Znumpy.testingrM   r   Znctr   r0   Úitemr2   r   )rM   Z	mvsk_10_1Úc1Úc2Úc3Zc4ÚncZmc1r   r   r   Zmvsk_ncr   r   r   Únct_kurt_bugp   s    rV   Ú__main__c                 C   s^   g | ]V\}}t  |d  d |d d  ¡dkrt  |d  d ¡r||d  d |d d f‘qS )r   r   r*   g�íµ ÷Æ°>©r   r=   r1   ©Ú.0rE   rC   r   r   r   Ú
<listcomp>Œ   s    " ÿr[   c                 C   s^   g | ]V\}}t  |d  d  |d d   ¡dkrt  |d  d  ¡r||d  d  |d d  f‘qS ©r   r*   ç{®Gáz„?rX   rY   r   r   r   r[   Ž   s    " ÿc                 C   s^   g | ]V\}}t  |d  d |d d  ¡dkrt  |d  d  ¡r||d  d |d d f‘qS r\   rX   rY   r   r   r   r[   �   s    " ÿc                 C   s^   g | ]V\}}t  |d  d |d d  ¡dkrt  |d  d  ¡r||d  d |d d f‘qS )r   r   r*   r]   rX   rY   r   r   r   r[   ’   s    " ÿ)ÚSimpleTablez
Mean difference at least 1e-6rA   Z	diststatsr6   )Úheadersz"
Variance difference at least 1e-2z
Skew difference at least 1e-2z"
Kurtosis difference at least 1e-2)"Ú__doc__Únumpyr   Zscipyr   Z)statsmodels.sandbox.distributions.sppatchr   Z
distparamsr   r7   r   r   r   r   r    r!   r#   r@   r;   r>   r?   r3   rL   rV   Ú__name__ÚitemsZmean_Zvar_r   r   Zstatsmodels.iolibr^   Úlenr5   r   r   r   r   Ú<module>   sF   5
