ó
Ë½÷Xc           @   sÑ   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
 m Z m Z d  d l	 m Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   productt   permutationsN(   t   assert_array_lesst   assert_allcloset   assert_raises(   t   invt   eight   norm(   t   orthogonal_procrustesc          C   sW   t  j j d ƒ t  j j d d d ƒ }  t  j j d d d ƒ } t t t |  | ƒ d  S(   NiÒ  i   i   i   (   t   npt   randomt   seedt   randnR   t
   ValueErrorR   (   t   At   B(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt)   test_orthogonal_procrustes_ndim_too_large
   s    c          C   sK   t  j j d ƒ t  j j d ƒ }  t  j j d ƒ } t t t |  | ƒ d  S(   NiÒ  i   (   R	   R
   R   R   R   R   R   (   R   R   (    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt)   test_orthogonal_procrustes_ndim_too_small   s    c          C   s}   t  j j d ƒ d d d d f }  xT t |  d ƒ D]C \ } } t  j j | Œ  } t  j j | Œ  } t t t | | ƒ q2 Wd  S(	   NiÒ  i   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R	   R
   R   R   R   R   R   R   (   t   shapest   at   bR   R   (    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt)   test_orthogonal_procrustes_shape_mismatch   s    c    	      C   sß   t  j j d ƒ d \ }  } t  j j |  | ƒ } t  j j |  | ƒ } x’ t  j t  j t  j f D]w } | j ƒ  } | | d <| j ƒ  } | | d <xB | | f | | f | | f f D] \ } } t t t	 | | ƒ q´ Wq` Wd  S(   NiÒ  i   i   i   (   i   i   (   i   i   (   i   i   (
   R	   R
   R   R   t   inft   nant   copyR   R   R   (	   t   mt   nt   A_goodt   B_goodt	   bad_valuet   A_badt   B_badR   R   (    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt0   test_orthogonal_procrustes_checkfinite_exception!   s     

.c    
      C   sì   t  j j d ƒ d \ }  } xÉ t d ƒ D]» } t  j j |  | ƒ } t  j j |  | ƒ } t | | ƒ \ } } xs t  j t  j j d ƒ ƒ D]V } xM t  j t  j j d ƒ ƒ D]0 } t | | | | ƒ \ }	 } t |	 | ƒ q¬ WqŠ Wq) Wd  S(   NiÒ  i   i   (   i   i   (   R	   R
   R   t   rangeR   R   t   squareR   (
   R   R   t   it   A_origt   B_origt   R_origt   st   A_scalet   B_scalet   R(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt+   test_orthogonal_procrustes_scale_invariance/   s    ""c          C   s  t  j j d ƒ xø d d d f D]ç \ }  } t  j j |  | ƒ } t  j j |  | ƒ } | | j ƒ  t  j | ƒ f } | | j ƒ  t  j | ƒ f } t | | ƒ \ } } | j | ƒ } xN t | | ƒ D]= \ }	 }
 t |	 |
 ƒ \ } } | j | ƒ } t	 | | ƒ qÆ Wq  Wd  S(   NiÒ  i   i   (   i   i   (   i   i   (   i   i   (
   R	   R
   R   R   t   tolistt   matrixR   t   dotR    R   (   R   R   t   A_arrt   B_arrt   Ast   Bst   R_arrR'   t   AR_arrR   R   R*   t   AR(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt+   test_orthogonal_procrustes_array_conversion<   s    c          C   s‚  t  j j d ƒ xkd d d	 f D]Z\ }  } t  j j |  | ƒ } t  j j | | ƒ } t | j | ƒ \ } } t t | ƒ | j ƒ t  j | | j ƒ } t	 | | ƒ \ } } t t | ƒ | j ƒ t | j | ƒ | ƒ | d t  j j |  | ƒ }	 t	 |	 | ƒ \ }
 } t t |
 ƒ |
 j ƒ |	 j | ƒ } |	 j |
 ƒ } t
 | | d d ƒ} t
 | | d d ƒ} t | | ƒ q  Wd  S(
   NiÒ  i   i   g{®Gáz„?t   ordt   fro(   i   i   (   i   i   (   i   i   (   R	   R
   R   R   R   t   TR   R   R.   R   R   R   (   R   R   R   t   Xt   wt   VR   R*   R'   t   A_perturbedt   R_primet   naive_approxt   optim_approxt   naive_approx_errort   optim_approx_error(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt   test_orthogonal_procrustesK   s$    c         C   s    |  j  d d ƒ } |  | | f S(   Nt   axisi    (   t   mean(   R   t   mu(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt	   _centeredl   s    c    
      C   sõ   t  j d d g d d g d d g d d g g d t ƒ}  t  j d d g d d g d d g d d g g d t ƒ} t |  ƒ \ } } t | ƒ \ } } t | | ƒ \ } } | t  j t | ƒ ƒ } | t  j | | ƒ | }	 t |	 | d	 d
 ƒd  S(   Niýÿÿÿi   iþÿÿÿi   t   dtypei   i    i   t   atolg:Œ0âŽyE>(	   R	   t   arrayt   floatRG   R   R"   R   R.   R   (
   R$   R%   R   t   A_muR   t   B_muR*   R'   t   scalet   B_approx(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt(   test_orthogonal_procrustes_exact_exampleq   s    99c          C   sÜ  t  j d d g d d g d d g d d g g d t ƒ}  t  j d d g d d g d d	 g d
 d g g d t ƒ} t |  ƒ \ } } t | ƒ \ } } t | | ƒ \ } } | t  j t | ƒ ƒ } | t  j | | ƒ | }	 t  j d d g d d g d d g d d g g d t ƒ}
 t |	 |
 d d ƒd } t  j t |	 | ƒ t | ƒ ƒ } t | | ƒ t | | ƒ \ } } | t  j t | ƒ ƒ } | t  j | | ƒ | } t  j t | |  ƒ t | ƒ ƒ } t | | ƒ d  S(   Niýÿÿÿi   iþÿÿÿi   RH   i(   i   i    iØÿÿÿi   i   iîÿÿÿiëÿÿÿi   RI   g:Œ0âŽyE>gñÒÇ×ÎÜ?(	   R	   RJ   RK   RG   R   R"   R   R.   R   (   R$   R%   R   RL   R   RM   R*   R'   RN   RO   t   expectedt   expected_disparityt   AB_disparityt   A_approxt   BA_disparity(    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt,   test_orthogonal_procrustes_stretched_example‰   s"    999##c          C   s9  t  j d d g d d g d d g d d g g d t ƒ}  t  j d d g d d g d d g d d g g d t ƒ} t  j d	 d
 g d	 d g d	 d g d d g g ƒ } t |  ƒ \ } } t | ƒ \ } } t | | ƒ \ } } | t  j t | ƒ ƒ }	 |	 t  j | | ƒ | }
 t |
 | ƒ t | t | ƒ | ƒ d  S(   Ni   iþÿÿÿiüÿÿÿiúÿÿÿi   RH   i   i   gCuRãÎÁ¿g”'œ‚aå?gCuRãÎÁ?gä¯ûT6¨Ù¿gä¯ûT6¨Ù?(	   R	   RJ   RK   RG   R   R"   R   R.   R   (   R$   R%   t   B_standardizedR   RL   R   RM   R*   R'   RN   RO   (    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt(   test_orthogonal_procrustes_skbio_exampleŸ   s    99			(   t	   itertoolsR    R   t   numpyR	   t   numpy.testingR   R   R   t   scipy.linalgR   R   R   R   R   R   R   R    R+   R6   RC   RG   RP   RV   RX   (    (    (    sA   /tmp/pip-build-7oUkmx/scipy/scipy/linalg/tests/test_procrustes.pyt   <module>   s   								!			