a
    \:b                     @   sf   d dl Zd dlmZ d dlZd dlmZ d dlmZ d dl	m
  mZ d dlmZ G dd deZdS )    N)assert_almost_equal)get_rdataset)IGNORED_EXCEPTIONS)HypothesisTestWarningc                   @   sx   e Zd Z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dd Zdd Zdd Zdd ZdS )TestDistDependenceMeasuresc                 C   sr   t jd t tddd| _| jt | j | _d| _	d| _
d| _d| _d	| _d
| _d| _d| _d| _dS )a  
        Values were obtained via the R `energy` package.

        R code:
        ------
        > dcov.test(x, y, R=200)

            dCov independence test (permutation test)

        data:  index 1, replicates 200
        nV^2 = 45829, p-value = 0.004975
        sample estimates:
            dCov
        47.86925

        > DCOR(x, y)
        $dCov
        [1] 47.86925

        $dCor
        [1] 0.9999704

        $dVarX
        [1] 47.28702

        $dVarY
        [1] 48.46151
              e   )      g,?g%CG@g"DG@gscz;H@g8d`t?i  g?6@gWJ@gBr?N)npZrandomZseedarrayrangeZreshapexlogydcor_expdcov_exp
dvar_x_exp
dvar_y_exppval_emp_exptest_stat_emp_expS_exptest_stat_asym_exppval_asym_exp)cls r   Slib/python3.9/site-packages/statsmodels/stats/tests/test_dist_dependant_measures.pysetup_class   s    z&TestDistDependenceMeasures.setup_classc                 C   sR   t jtdd0 t| jd dd d f | j W d    n1 sD0    Y  d S )Nzsame number of observationsmatch   pytestZraises
ValueErrorddmdistance_covariance_testr   r   selfr   r   r   test_input_validation_nobs=   s    z5TestDistDependenceMeasures.test_input_validation_nobsc                 C   sF   t jtdd$ tj| j| jdd W d    n1 s80    Y  d S )NzUnknown 'method' parameterr   Z
wrong_namemethodr"   r'   r   r   r   $test_input_validation_unknown_methodA   s    z?TestDistDependenceMeasures.test_input_validation_unknown_methodc                 C   sF   t j| j| jdd\}}}|dks&J t|| jd t|| jd d S )NZasymr*      r   )r%   r&   r   r   r   r   r   r(   	statisticpvalr+   r   r   r    test_statistic_value_asym_methodE   s    
z;TestDistDependenceMeasures.test_statistic_value_asym_methodc                 C   sp   t t* tj| j| jdd\}}}W d    n1 s:0    Y  |dksPJ t|| jd t|| j	d d S )Nempr*   r   r   )
r#   warnsr   r%   r&   r   r   r   r   r   r.   r   r   r   test_statistic_value_emp_methodM   s    
*z:TestDistDependenceMeasures.test_statistic_value_emp_methodc                 C   sn   d}t jt|dH tj| j| jddd\}}}t|| jd t|| j	d W d    n1 s`0    Y  d S )Nz)The asymptotic approximation will be usedr   r2      )r+   Br   r   )
r#   r3   UserWarningr%   r&   r   r   r   r   r   )r(   Z
match_textr/   r0   _r   r   r   test_fallback_to_asym_methodX   s    z7TestDistDependenceMeasures.test_fallback_to_asym_methodc                 C   s   t tj| jtdtj| jtd}t|j| j	d t|j
| jd t|j| jd t|j| jd t|j| jd t|j| jd d S )NZdtyper   r-   )r%   distance_statisticsr   asarrayr   floatr   r   test_statisticr   distance_correlationr   distance_covariancer   dvar_xr   dvar_yr   Sr   )r(   statsr   r   r   test_statistics_for_2d_inputa   s    z7TestDistDependenceMeasures.test_statistics_for_2d_inputc                 C   s   t jtddtd}|t | }t||}t|jdd t|j	dd t|j
dd t|jd	d t|jd
d t|jdd d S )Nr      r:   g#x@r   gi'?r-   g?*bn@g[f@gMo5@g8dH@)r   r   r   r=   r   r%   r;   r   r>   r?   r@   rA   rB   rC   )r(   r   r   rD   r   r   r   test_statistics_for_1d_inputn   s    z7TestDistDependenceMeasures.test_statistics_for_1d_inputc                 C   s   z t djjddddf }W n ty<   td Y n0 tj|dd td}tj|dd td}t	
||}t|jdd t|jd	d t|jd
d t|jdd t|jdd t|jdd t	j||dd\}}}t|dd |dksJ dS )a  
        R code example from the `energy` package documentation for
        `energy::distance_covariance.test`:

        > x <- iris[1:50, 1:4]
        > y <- iris[51:100, 1:4]
        > set.seed(1)
        > dcov.test(x, y, R=200)

            dCov independence test (permutation test)

        data:  index 1, replicates 200
        nV^2 = 0.5254, p-value = 0.9552
        sample estimates:
             dCov
        0.1025087
        irisNr-   3Failed with HTTPError or URLError, these are random2   r:   d   gU0*?gK`I?g3>?g/\?g;w?gtp[?   r6   r2   )r   datavaluesr   r#   skipr   r<   r=   r%   r;   r   r>   r?   r@   rA   rB   rC   r&   )r(   rH   r   r   rD   r>   r8   r+   r   r   r    test_results_on_the_iris_dataset|   s      z;TestDistDependenceMeasures.test_results_on_the_iris_datasetc                 C   s
  z t djjddddf }W n ty<   td Y n0 tj|dd td}tj|dd td}t	
||}tt|jdd	 t|jd
d t|jdd t|jdd t|jdd t|jdd	 t	j||dd\}}}tt|dd	 |dksJ dS )ag  
        R code:
        ------

        > data("quakes")
        > x = quakes[1:50, 1:3]
        > y = quakes[51:100, 1:3]
        > dcov.test(x, y, R=200)

            dCov independence test (permutation test)

        data:  index 1, replicates 200
        nV^2 = 45046, p-value = 0.4577
        sample estimates:
            dCov
        30.01526
        quakesNr   rI   rJ   r:   rK   i  r   gb]A>?r-   gP>@g8EGrEe@g9vqb@i)  rL   rM   r2   )r   rN   rO   r   r#   rP   r   r<   r=   r%   r;   r   roundr>   r?   r@   rA   rB   rC   r&   )r(   rR   r   r   rD   r>   r8   r+   r   r   r   "test_results_on_the_quakes_dataset   s      z=TestDistDependenceMeasures.test_results_on_the_quakes_datasetc                 C   s   t t| j| j| jd d S Nr-   )r   r%   r?   r   r   r   r'   r   r   r   	test_dcor   s    z$TestDistDependenceMeasures.test_dcorc                 C   s   t t| j| j| jd d S rU   )r   r%   r@   r   r   r   r'   r   r   r   	test_dcov   s    z$TestDistDependenceMeasures.test_dcovc                 C   s   t t| j| jd d S rU   )r   r%   Zdistance_variancer   r   r'   r   r   r   	test_dvar   s    z$TestDistDependenceMeasures.test_dvarN)__name__
__module____qualname__classmethodr   r)   r,   r1   r4   r9   rE   rG   rQ   rT   rV   rW   rX   r   r   r   r   r      s   
0	((r   )Znumpyr   Znumpy.testingr   r#   Zstatsmodels.datasetsr   Z%statsmodels.datasets.tests.test_utilsr   Z*statsmodels.stats.dist_dependence_measuresrD   Zdist_dependence_measuresr%   Zstatsmodels.tools.sm_exceptionsr   objectr   r   r   r   r   <module>   s   