ó
‡ˆ\c           @   sT  d  Z  d d l Z d d l 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 d d	 l m Z d d
 l m Z d d l m Z m Z m Z d d l m Z d d l m Z d d l m Z d d „ Z d „  Z e d „ Z d „  Z d „  Z e d „ Z d „  Z  d „  Z! d „  Z" d S(   s   
Test the fastica algorithm.
iÿÿÿÿN(   t   stats(   t   assert_almost_equal(   t   assert_array_almost_equal(   t   assert_less(   t   assert_equal(   t   assert_warns(   t   assert_raises(   t   assert_raises_regex(   t   FastICAt   fasticat   PCA(   t   _gs_decorrelation(   t   moves(   t   ConvergenceWarningc         C   sB   t  j |  | ƒ }  |  |  j d d ƒ 8}  |  |  j d d ƒ :}  d S(   s-   Centers and norms x **in place**

        Parameters
        -----------
        x: ndarray
            Array with an axis of observations (statistical units) measured on
            random variables.
        axis: int, optional
            Axis along which the mean and variance are calculated.
    t   axisi    N(   t   npt   rollaxist   meant   std(   t   xR   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   center_and_norm   s    c          C   sÄ   t  j j d ƒ }  t  j j |  j d d ƒ ƒ \ } } } |  j d ƒ } t | | d ƒ t | d j ƒ  d ƒ |  j d ƒ } t | | d ƒ } t  j	 | | j
 ƒ } t | d  d j ƒ  d ƒ d  S(   Ni    i
   i   g»½×Ùß|Û=i   (   R   t   randomt   RandomStatet   linalgt   svdt   randnR   R   t   sumt   dott   T(   t   rngt   Wt   _t   wt   ut   tmp(    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_gs(   s    'c      	   C   s¾  t  j j d ƒ } t  j j d ƒ d } d t  j t  j d d | ƒ ƒ d k d } t j j d d | ƒ} t  j	 | | f j
 } t | ƒ | \ } } d } t  j t  j | ƒ t  j | ƒ g t  j | ƒ t  j | ƒ g g ƒ } t  j | | ƒ } |  r| d | j d d ƒ 7} n  t | ƒ d	 „  }	 d
 d g }
 d d d |	 g } t t g } x;t j |
 | | ƒ D]$\ } } } | rÊt | j
 d | d | ƒ\ } } } t t t | j
 d t  j d | ƒng t d d d t ƒ j | j
 ƒ } t | d | d | d t ƒ\ } } } t t t | d t  j d | ƒ| j
 } | rht | t  j t  j | | ƒ | ƒ ƒ n  t | ƒ | \ } } t t  j | | ƒ ƒ t t  j | | ƒ ƒ k r½| \ } } n  | t  j t  j | | ƒ ƒ 9} | t  j t  j | | ƒ ƒ 9} |  sJt t  j | | ƒ | d d d ƒt t  j | | ƒ | d d d ƒqlt t  j | | ƒ | d d d ƒt t  j | | ƒ | d d d ƒqlWt | j
 d | d | d d ƒ\ } } } t d | d | d d ƒ } | j | j
 ƒ } t | j j  d ƒ t | j  d ƒ t! | | ƒ t! | | j" | j
 ƒ ƒ t | j# j  d ƒ xH t  j d g D]7 } t d | d | d d ƒ } t t | j$ | j
 ƒ qWWt t% t d t& j' d ƒ ƒ j$ | j
 ƒ d  S(   Ni    iè  i   id   i   t   sizeg333333ã?gš™™™™™¹?c         S   s"   |  d d |  d j  d d ƒ f S(   Ni   i   R   iÿÿÿÿ(   R   (   R   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   g_testO   s    t   parallelt	   deflationt   logcosht   expt   cubet   funt	   algorithmt   n_componentst   whitent   decimalt   random_states   exp(-.5(x^2))i
   (   i   i   (   iè  i   (   i   i   ((   R   R   R   t   seedt   sint   linspaceR    t   tt   rvst   c_R   R   t   arrayt   cosR   R   t   Truet   Falset	   itertoolst   productR	   R   t
   ValueErrort   tanhR
   t   fit_transformR   t   abst   signR   R   t   components_t   shapeR   t	   transformt   mixing_t   fitt	   TypeErrorR   t   xrange(   t	   add_noiseR   t	   n_samplest   s1t   s2t   st   phit   mixingt   mR%   t   algost   nlst	   whiteningt   algot   nlR.   t   k_RE   t   s_t   Xt   s1_t   s2_R   t   sources_funt   icat   sourcest   fn(    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_fastica_simple6   sl    ,
!%
	%$
!'	(
0#&#'*c          C   s_   d d g d d g g }  t  d d d t d d ƒ } t t | j |  ƒ t | d ƒ s[ t ‚ d  S(   Ni    i   R-   R.   R0   RE   (   R   R:   R   t   UserWarningRF   t   hasattrt   AssertionError(   RP   R\   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_fastica_nowhitenˆ   s    c    	      C   sì   t  j j d ƒ }  d } t  j d d | ƒ } t  j | ƒ } t  j t  j t  j | ƒ ƒ } t  j | | f j } t	 | ƒ | \ } } |  j
 d d ƒ } t  j | | ƒ } t d d d d d	 |  d
 d d d ƒ } t t | j | j ƒ d  S(   Ni    iè  id   i   i   R,   R&   R-   R0   t   max_itert   tolg        (   R   R   R   R3   R2   t   ceilt   piR6   R   R   R   R   R   R   R   RF   (	   R   RJ   R4   RK   RL   RM   RO   RP   R\   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_fastica_convergence_fail‘   s    
c         C   s  t  j j d ƒ } d } t  j d d | ƒ } t  j | ƒ } t  j t  j t  j | ƒ ƒ } t  j | | f j } t	 | ƒ | \ } } | j
 d d ƒ } t  j | | ƒ } |  rÎ | d | j
 d | ƒ 7} n  t	 | ƒ t | j d d d | ƒ\ }	 }
 } | j } t | t  j t  j |
 |	 ƒ | ƒ ƒ t	 | ƒ | \ } } t t  j | | ƒ ƒ t t  j | | ƒ ƒ k r| \ } } n  | t  j t  j | | ƒ ƒ 9} | t  j t  j | | ƒ ƒ 9} |  st t  j | | ƒ | d	 d
 d ƒt t  j | | ƒ | d	 d
 d ƒn  d  S(   Ni    iè  id   i   i   gš™™™™™¹?R-   R0   i   R/   i   (   R   R   R   R3   R2   Rf   Rg   R6   R   R   R   R   R	   R   R@   RA   (   RI   R   RJ   R4   RK   RL   RM   RO   RP   RV   RE   RW   RY   RZ   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_non_square_fasticaª   s2    

$	%
0#c          C   s#  t  j j d ƒ }  |  j d	 ƒ } xû t d g t d  g g D]á \ } } | d  k	 rX | n
 | j d } t d | d | d d ƒ } | j	 | ƒ } t
 | j j | d f ƒ t
 | j d | f ƒ t d | d | d d ƒ } | j | ƒ t
 | j j | d f ƒ | j | ƒ } t | | ƒ q: Wd  S(
   Ni    id   i
   i   i   R-   R.   R0   (   id   i
   (   R   R   R   t   random_sampleR9   R:   t   NoneRC   R   R?   R   RB   RF   RD   R   (   R   RX   R.   R-   t   n_components_R\   t   Xtt   Xt2(    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_fit_transformÕ   s    %c       	   C   s  d }  d } d
 \ } } t  j j d ƒ } | j | |  f ƒ } i |  | f t | f 6|  | f t | f 6|  | f t | f 6|  | f t | f 6} xõ t t g D]ç } xÞ | | g D]Ð } | d  k	 rÉ | n
 | j d }	 t d | d | d | ƒ }
 t	 j
 d	 t ƒ  |
 j | ƒ } Wd  QX| | |	 f } t |
 j j | ƒ |
 j | ƒ } t | j | j ƒ | | j d k r± t | | ƒ q± q± Wqž Wd  S(   Ni
   id   i   i    i   R-   R0   R.   t   record(   i   i
   (   R   R   R   Rj   R9   R:   Rk   RC   R   t   warningst   catch_warningsR?   R   RE   t   inverse_transformR   (   t
   n_featuresRJ   t   n1t   n2R   RX   t   expectedR.   R-   Rl   R\   Rm   t   expected_shapet   X2(    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_inverse_transformê   s.    	c       	   C   s¹   d }  d } t  j j d ƒ } | j | |  f ƒ } | j |  d |  d ƒ } t t d t d d ƒt t d t | d i d d	 6ƒt t d
 t | d | ƒt t d t | d d ƒd  S(   Ni   i
   i    i   s!   max_iter should be greater than 1Rd   s   alpha must be in \[1,2\]t   fun_argst   alphas0   w_init has invalid shape.+should be \(3L?, 3L?\)t   w_inits3   Invalid algorithm.+must be.+parallel.+or.+deflationR,   t   pizza(	   R   R   R   Rj   R   R   R=   R   R	   (   Rt   RJ   R   RX   R}   (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   test_fastica_errors  s    			(#   t   __doc__R;   Rq   t   numpyR   t   scipyR    t   sklearn.utils.testingR   R   R   R   R   R   R   t   sklearn.decompositionR   R	   R
   t   sklearn.decomposition.fastica_R   t   sklearn.externals.sixR   t   sklearn.exceptionsR   R   R#   R:   R_   Rc   Rh   Ri   Ro   Rz   R   (    (    (    sG   lib/python2.7/site-packages/sklearn/decomposition/tests/test_fastica.pyt   <module>   s0   	R			+		