
    bi                      x    d dl Z d dl mZmZ d dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ  G d d      Z G d d	      Zy)
    N)raiseswarns)assert_approx_equalassert_allcloseassert_equal)cdist)statsc                       e Zd ZdZd Zd Zd Zd Zd Ze	j                  j                  ddd	g      d
        Zd Zd Zy)TestMGCErrorWarningsz1 Tests errors and warnings derived from MGC.
    c                     t        j                  d      }dgdz  }t        t        t        j
                  ||       t        t        t        j
                  ||       y )N      nparangeassert_raises
ValueErrorr	   multiscale_graphcorrselfxys      U/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/stats/tests/test_mgc.pytest_error_notndarrayz*TestMGCErrorWarnings.test_error_notndarray   sB    IIbMC"Hj%"<"<aCj%"<"<aC    c                     t        j                  d      j                  dd      }|j                  dd      }t        t        t
        j                  ||       y )Nd         
   )r   r   reshaper   r   r	   r   r   s      r   test_error_shapez%TestMGCErrorWarnings.test_error_shape   s@    IIcN""2q)IIb"j%"<"<aCr   c                     t        j                  d      }t        j                  d      }t        t        t        j
                  ||       y )N   r   r   s      r   test_error_lowsamplesz*TestMGCErrorWarnings.test_error_lowsamples   s0    IIaLIIaLj%"<"<aCr   c                 
   t        j                  dt              }t         j                  |d<   t	        t
        t        j                  ||       t        j                  d      }t	        t
        t        j                  ||       y )Nr   )dtyper   )r   r   floatnanr   r   r	   r   r   s      r   test_error_nansz$TestMGCErrorWarnings.test_error_nans    sT    IIb&vv!j%"<"<aCIIbMj%"<"<aCr   c                 v    t        j                  d      }d}t        t        t        j
                  |||       y )Nr   r   )compute_distancer   )r   r   r,   s      r   test_error_wrongdisttypez-TestMGCErrorWarnings.test_error_wrongdisttype)   s.    IIbMj%"<"<a'7	9r   reps1c                 r    t        j                  d      }t        t        t        j
                  |||       y )Nr   r.   r   )r   r.   r   s      r   test_error_repsz$TestMGCErrorWarnings.test_error_reps0   s'     IIbMj%"<"<aNr   c                 v    t        j                  d      }d}t        t        t        j
                  |||       y )Nr   r   r2   )r   r   assert_warnsRuntimeWarningr	   r   )r   r   r.   s      r   test_warns_repsz$TestMGCErrorWarnings.test_warns_reps9   s*    IIbM^U%?%?ADQr   c                     t        j                  d      }t        j                  d      t         j                  z  }t	        t
        t        j                  ||       y )Nr   )r   r   onesinfr   r   r	   r   r   s      r   test_error_inftyz%TestMGCErrorWarnings.test_error_infty?   s9    IIbMGGBK"&& j%"<"<aCr   N)__name__
__module____qualname____doc__r   r"   r%   r*   r-   pytestmarkparametrizer3   r7   r;    r   r   r   r   
   sb    DDDD9 [[V
& O	O
RDr   r   c                      e Zd ZdZd ZddZej                  j                  ej                  j                  dg d      d               Z
ej                  j                  ej                  j                  ddd	g      d
               Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j!                  d      ej                  j"                  d               Zej                  j                  d        Zy)TestMGCStatz) Test validity of MGC test statistic
    c                 L    t         j                  j                  d      | _        y )NixK)r   randomdefault_rngrng)r   s    r   setup_methodzTestMGCStat.setup_methodI   s    99((4r   Nc                    |xs | j                   }|dk(  r<|j                  dd|df      }|d|j                  |j                  df      z  z   }n`|dk(  rt	        j
                  | j                   j                  dd|df            }|t	        j                  t        j                  |z        z  }|t	        j                  t        j                  |z        z  d	| j                   j                  |j                  df      z  z   }n|d
k(  r| j                   j                  |df      }| j                   j                  |df      }	| j                   j                  dd|df      }
| j                   j                  dd|df      }|dz  d|
z  z   dz
  }|	dz  d|z  z   dz
  }nt        d      |dkD  r:| j                   j                  ||dz
  f      }t	        j                  ||fd      }||fS )Nlinearr/      sizeg333333?	nonlinearr   r   g?independence      ?)prO   r$      z3sim_type must be linear, nonlinear, or independence)axis)rI   uniformrG   rO   r   arraycospisinstandard_normalbinomialr   concatenate)r   sampsdimssim_typerI   r   r   unifuvu_2v_2
dims_noises                r   _simulationszTestMGCStat._simulationsL   s   oTXXxB
3AC#**1661+*666A $88DHH,,Q
,CDDrvvbeedl++Aruut|,,TXX__1661+_667A '((uaj(9A((uaj(9A((##AE1:#>C((##AE1:#>C!aeaA!aeaA  , - - !811tAv1GJ:Q7A!tr   zsim_type, obs_stat, obs_pvalue))rL   g@%]?ܣ'^P?)rP   g.?rh   )rQ   goz_=pgnL?c                     t         j                  j                  d      }| j                  dd||      \  }}t	        j
                  |||      \  }}}	t        ||       t        ||       y )N   	=gL r   rM   r^   r_   r`   rI   random_stater   rG   rH   rg   r	   r   r   
r   r`   obs_stat
obs_pvaluerI   r   r   statpvalue_s
             r   	test_onedzTestMGCStat.test_onedo   se     ii##J/  sX3 O1  44QLfah'
+r   )rL   gxO?rh   )rP   g	W?g3m?c                     t         j                  j                  d      }| j                  dd||      \  }}t	        j
                  |||      \  }}}	t        ||       t        ||       y )Nrj   r   r   rk   rl   rn   ro   s
             r   
test_fivedzTestMGCStat.test_fived   se     ii##J/  sX3 O1  44QLfah'
+r   c                    | j                   j                  ddd      }| j                   j                  d      }t        j                  ||| j                         \  }}}t        |dd	       t        |d
d	       | j                   j                  d      }t        j                  ||d| j                         \  }}}t        |dd	       t        |d
d	       y )Nr   rR   )r   r   rN   )P   r   rl   g      ?rM   significantMbP?T)
is_twosamprm   )rI   r\   r[   r	   r   r   r   r   r   rr   rs   rt   s         r   test_twosampzTestMGCStat.test_twosamp   s     HHc3X6HH$$'$2  44QQfaD#15FEq9 HH$$($3  44QdBF((LfaD#15FEq9r   c                     | j                  ddd      \  }}t        j                  ||d| j                        \  }}}t	        |dd       t	        |d	d       y )
Nr   rM   rL   r^   r_   r`   rT   )workersrm   
ףp=
?rz   r|   )rg   r	   r   rI   r   r~   s         r   test_workerszTestMGCStat.test_workers   s]       sX F1  44Q1BF((LfaD$A6FEq9r   c                     | j                  ddd      \  }}t        j                  ||d      \  }}}t        |dd       t        |dd       y )	Nr   rM   rL   r   rl   r   rz   r|   )rg   r	   r   r   r~   s         r   test_random_statezTestMGCStat.test_random_state   sS       sX F1  44QJfaD$A6FEq9r   c                     | j                  ddd      \  }}t        ||d      }t        ||d      }t        j                  ||d d      \  }}}t	        |dd	       t	        |d
d	       y )Nr   rM   rP   r   	euclidean)metric)r,   rm   gw/?rz   r|   )rg   r   r	   r   r   )r   r   r   distxdisty	stat_distpvalue_distrt   s           r   test_dist_permzTestMGCStat.test_dist_perm   sw       s[ I1a;/a;/$)$>$>uePTLM%O!	; 	Iu!<KA>r   r   c                     | j                  ddd      \  }}t        j                  ||d      \  }}}t        |d       y )Nr   rM   rL   r   rl   g'^P?)rg   r	   r   r   )r   r   r   rt   rs   s        r   test_pvalue_literaturez"TestMGCStat.test_pvalue_literature   sE       sX F1 11!QQG61'r   c                     | j                  ddd      \  }}t        j                  ||d      }t        |j                  |j
                         y )Nr   rM   rL   r   rl   )rg   r	   r   r   rr   	statistic)r   r   r   ress       r   
test_aliaszTestMGCStat.test_alias   sE       sX F1((AA>SXXs}}-r   )r   rM    N)r<   r=   r>   r?   rJ   rg   r@   rA   xslowrB   ru   rw   r   r   r   r   	fail_slowslowr   r   rC   r   r   rE   rE   F   sa   5!F [[[[= @ , , [[[[= 	35	@ , , [[: :& [[: : [[: : [[
? 
? [[2[[(  ( [[. .r   rE   )r@   r   r   r   r5   numpyr   numpy.testingr   r   r   scipy.spatial.distancer   scipyr	   r   rE   rC   r   r   <module>r      s3     A  L L ( 9D 9DxR. R.r   