U
    Kvf                     @   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re  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 )+zscript 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   Y/tmp/pip-unpacked-wheel-2v6byqio/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rtt|dkrt	|  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
   locZscale	exceptionr   gMbP?)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maskr5   Zspecial_kwdsZmnc0Zmnc1r   r   r   Zmnc1_lcmeveseZkeemZdiffr   r'   r   check_cont_basic;   s>    


&
rK   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 )ztest 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   )decimalrM   g8WV?g      ?gEd~?gl%?gu*'ȥ?gmn?g      @r*   r   N)	Znumpy.testingrL   r   Znctr   r/   itemr1   r   )rL   Z	mvsk_10_1Zc1c2c3Zc4ZncZmc1r   r   r   Zmvsk_ncr   r   r   nct_kurt_bugp   s    rS   __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<   r0   .0rD   rB   r   r   r   
<listcomp>   s    " rX   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*   {Gz?rU   rV   r   r   r   rX      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 rY   rU   rV   r   r   r   rX      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*   rZ   rU   rV   r   r   r   rX      s    " )SimpleTablez
Mean difference at least 1e-6r@   Z	diststatsr5   )headersz"
Variance difference at least 1e-2z
Skew difference at least 1e-2z"
Kurtosis difference at least 1e-2)"__doc__Znumpyr   Zscipyr   Z)statsmodels.sandbox.distributions.sppatchr   Z
distparamsr   r6   r   r   r   r   r    r!   r#   r?   r:   r=   r>   r2   rK   rS   __name__itemsZmean_Zvar_r   r   Zstatsmodels.iolibr[   lenr4   r   r   r   r   <module>   sF   5
