
&]\c           @` s  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l Z d d l m	 Z	 m
 Z
 m Z m Z m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z d d l Z d d l m Z m Z d d l Z d d l m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% d d l m& Z& d d l' Z d d	 l( m) Z) d
   Z* d e+ f d     YZ, d e+ f d     YZ- d e+ f d     YZ. d e+ f d     YZ/ d e+ f d     YZ0 d e+ f d     YZ1 d   Z2 d   Z3 d   Z4 d e+ f d     YZ5 d S(   s,    Test functions for linalg.matfuncs module

i    (   t   divisiont   print_functiont   absolute_importN(   t   arrayt   matrixt   identityt   dott   sqrtt   double(   t   assert_array_equalt   assert_array_lesst   assert_equalt   assert_array_almost_equalt   assert_array_almost_equal_nulpt   assert_allcloset   assert_(   t   _assert_warnst   suppress_warnings(	   t   funmt   signmt   logmt   sqrtmt   fractional_matrix_powert   expmt   expm_frechett	   expm_condt   norm(   t   _matfuncs_inv_ssq(   t   minimizec          C` sU   t  j d d d d g d d d d g d d d d g d d d d g g d t }  |  S(   sW  
    Return the test matrix from Experiment (1) of [1]_.

    References
    ----------
    .. [1] Awad H. Al-Mohy and Nicholas J. Higham (2012)
           "Improved Inverse Scaling and Squaring Algorithms
           for the Matrix Logarithm."
           SIAM Journal on Scientific Computing, 34 (4). C152-C169.
           ISSN 1095-7197

    g3d?g     L@i    gRal!A?gQI?g^?t   dtype(   t   npR   t   float(   t   A(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt%   _get_al_mohy_higham_2012_experiment_1   s    t	   TestSignMc           B` s,   e  Z d    Z d   Z d   Z d   Z RS(   c      
   C` s   t  d d d d d g d d d d	 d
 g d d d d d
 g d d d d d
 g d d d d d g g  } t  d d d d d g d d d d d g d d  d! d" d  g d# d$ d% d& d$ g d' d( d) d* d( g g  } t |  } t | |  d  S(+   Ng333333=@g3333338g     `Q@gfffffH@g      @gffffff"g@g      2g0g       g      $g      @g      4g333333#g333333#@g     9g.g#@g333333g      2@g3333332@g       @g'@g'Rqgy.@ge@5@g@ȽgUЛ'?g9\g+%gRQgQ?gGzgffffffgר#gw?î?gk#egC,Ng@g42
gF(@gcs@@(   R   R   R   (   t   selft   at   crt   r(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt	   test_nils6   s    c         C` s^   t  d d d d g d d d d g d d d d g d d d d g g  } t | d t } d  S(   Ng        i   i    t   disp(   R   R   t   False(   R#   R$   R&   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_defective1D   s    Hc      
   C` s|   t  d d d d d g d d d d	 d
 g d d d d d
 g d d d d d
 g d d d d d g f  } t | d t } d  S(   Ng333333=@g3333338g     `Q@gfffffH@g      @gffffff"g@g      2g0g       g      $g      @g      4g333333#g333333#@g     9g.g#@g333333g      2@g3333332@g       @R(   (   R   R   R)   (   R#   R$   R&   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_defective2I   s    c         C` s   t  d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g  } t | d	 t } d  S(
   Ng       g      9@g        g      g      $@g      @g       @g      .@R(   (   R   R   R)   (   R#   R$   R&   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_defective3S   s    !(   t   __name__t
   __module__R'   R*   R+   R,   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR"   4   s   			
t   TestLogMc           B` sk   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z RS(   c         C` s   t  d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g  } t d	  d
 d | } t | d t d  S(   Ng       g      9@g        g      g      $@g      @g       @g      .@i   g@y                R(   (   R   R   R   R)   (   R#   R$   t   m(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR'   a   s    !c         C` sJ   t    } t | d t \ } } t |  } t | | d d d d d  S(   NR(   t   rtolgh㈵>t   atolg+=(   R!   R   R)   R   R   (   R#   R    t   A_logmt   infot   A_round_trip(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt*   test_al_mohy_higham_2012_experiment_1_logmm   s    	c         C` sZ   t    } t | t j d t \ } } t |  } t t j | | d d d d  d  S(   NR(   R1   gh㈵>R2   g+=(   R!   R   R   t   logR)   R   R   t   allclose(   R#   R    t
   A_funm_logR4   R5   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt.   test_al_mohy_higham_2012_experiment_1_funm_logu   s    	c         C` s   t  j j d  x t d d  D] } t  j j | |  } x t  j d d d  D] } | | } t  j j |  } d j | |  } t	 | d t
 \ } } | j |  }	 t |	 |  t | d t
 \ }
 } t |
  } t | | d	 | qQ Wq  Wd  S(
   Ni  i   i   ii   i	   s   M:{0} eivals:{1}R(   t   err_msg(   R   t   randomt   seedt   ranget   randnt   logspacet   linalgt   eigvalst   formatR   R)   R   R   R   R   (   R#   t   nt
   M_unscaledt   scalet   Mt   WR;   t   M_sqrtmR4   t   M_sqrtm_round_tript   M_logmt   M_logm_round_trip(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_round_trip_random_float}   s    
c         C` s   t  j j d  x t d d  D] } t  j j | |  d t  j j | |  } xX t  j d d d  D]A } | | } t | d t \ } } t |  } t	 | |  qh Wq  Wd  S(	   Ni  i   i   y              ?ii   i	   R(   (
   R   R<   R=   R>   R?   R@   R   R)   R   R   (   R#   RD   RE   RF   RG   RK   R4   t   M_round_trip(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_round_trip_random_complex   s    ,
c         C` sf  d } xYd d g d d g g d d g d d g g d d g d d g g d d g d d g g f D] } t  j j |  } t t d   | D   t j | d	 t } t | d
 t	 \ } } t | j
 j | k  t j | d	 t } t | d
 t	 \ } } t | j
 j | k  t j | d	 t } t | d
 t	 \ } } t | j
 j | k  qa Wd  S(   Nt   Ft   Dt   Gi   i    i   i   c         s` s'   |  ] } | j  p | j d  k  Vq d S(   i    N(   t   imagt   real(   t   .0t   w(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pys	   <genexpr>   s    R   R(   (   RP   RQ   RR   (   t   scipyRA   RB   R   t   anyR   R   R   R   R)   R   t   chart   complex(   R#   t   complex_dtype_charst   matrix_as_listRH   R    R3   R4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt*   test_logm_type_preservation_and_conversion   s"    c         C` s   d d d g d d d g d d d g g } x t  t f D] } t j | d | } t j j |  } t d t j | j	  j
   k   t | d t \ } } t t j | j t j   t t |  |  q7 Wd  S(   Ni   i   R   g{Gz?R(   (   R   RZ   R   R   RW   RA   RB   R   t   absoluteRS   t   sumR   R)   t
   issubdtypeR   t   inexactR   R   (   R#   RG   t   dtt   XRV   t   YR4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_complex_spectrum_real_logm   s    *"c         C` s   x d d g d d g g d d g d d g g f D]f } x] t  t f D]O } t j | d | } t | d t \ } } t t j | j t j	   qD Wq1 Wd  S(   Ni   i    iR   R(   (
   R   RZ   R   R   R   R)   R   R`   R   t   complexfloating(   R#   RG   Rb   R    R3   R4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_real_mixed_sign_spectrum   s    c         C` s   t  j d d g d d g g  } t  j d d g d d g g  } xf | | j | | j f D]L } t j } t | t | d t \ } } t	 |  } t
 | | d d q[ Wd  S(   Ni    y              ?i   R(   R2   g+=(   R   R   t   asarrayt   TR   t   LogmExactlySingularWarningR   R   R)   R   R   (   R#   R    t   BRG   t   expected_warningt   LR4   t   E(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_exactly_singular   s    !!	c         C` s_   t  j d g g  } t j } t | t | d t \ } } t |  } t | | d d d  S(   Ng0.++R(   R2   g+=(	   R   R   R   t   LogmNearlySingularWarningR   R   R)   R   R   (   R#   RG   Rl   Rm   R4   Rn   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_nearly_singular   s
    	c         C` sl  d d g d d g g } d t  j d g t  j d d g g } t t |  | d d t t |  | d d d d g d d	 g g } d t  j d d
 t  j g d d	 t  j d g g } t t |  | d d t t |  | d d d d g d d	 g g } d t  j d d g d d	 t  j d g g } t t |  | d d t t |  | d d d  S(   Ni    i   ig      ?R2   g+=y              ?i   y              i   (   R   t   piR   R   R   (   R#   Rn   Rm   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt&   test_opposite_sign_complex_eigenvalues   s    '5.(   R-   R.   R'   R6   R:   RM   RO   R]   Re   Rg   Ro   Rq   Rs   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR/   _   s   					
						t	   TestSqrtMc           B` s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z RS(   c         C` s   t  j j d  x t d d  D]y } t  j j | |  } x[ t  j d d d  D]D } | | } t | d t \ } } | j |  } t	 | |  qQ Wq  Wd  S(   Ni  i   i   ii   i	   R(   (
   R   R<   R=   R>   R?   R@   R   R)   R   R   (   R#   RD   RE   RF   RG   RI   R4   RJ   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRM      s    
c         C` s   t  j j d  x t d d  D] } t  j j | |  d t  j j | |  } x[ t  j d d d  D]D } | | } t | d t \ } } | j |  } t	 | |  qh Wq  Wd  S(	   Ni  i   i   y              ?ii   i	   R(   (
   R   R<   R=   R>   R?   R@   R   R)   R   R   (   R#   RD   RE   RF   RG   RI   R4   RJ   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRO      s    ,
c         C` s-  d	 } t  |  } t d d d d g d | d d g d d | d g d d d d g g  } t d d d d g d | d d g d d | d g d d d d g g  } | j d } t t | |  |  t | d t d | d } t t | |  |  t | d t d d d } t t | |  |  d  S(
   Ni   ig      ?i    i   g      ?R(   t	   blocksizeg      ?(   R   R   t   shapeR   R   R   R)   (   R#   t   et   seR$   t   saRD   t   esa(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_bad  s     c         C` s{  d } xnd d g d d g g d d g d d g g d d g d d g g d d g d d g g d d g d d g g f D] } t  j j |  } t t d   | D   t j | d	 t } t | d
 t	 \ } } t | j
 j | k  t j | d	 t } t | d
 t	 \ } } t | j
 j | k  t j | d	 t } t | d
 t	 \ } } t | j
 j | k  qv Wd  S(   NRP   RQ   RR   i   i    i   i   c         s` s'   |  ] } | j  p | j d  k  Vq d S(   i    N(   RS   RT   (   RU   RV   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pys	   <genexpr>)  s    R   R(   (   RP   RQ   RR   (   RW   RA   RB   R   RX   R   R   R   R   R)   R   RY   RZ   (   R#   R[   R\   RH   R    t   A_sqrtmR4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt+   test_sqrtm_type_preservation_and_conversion  s$    c         C` s  d
 } xd d g d d g g d d g d d g g d d d g d d d g d d d g g f D] } t  j j |  } t t d   | D   t j | d t } t | d	 t	 \ } } t | j
 j | k  t j | d t } t | d	 t	 \ } } t | j
 j | k  q^ Wd  S(   NRP   RQ   RR   i   i    ic         s` s'   |  ] } | j  p | j d  k  Vq d S(   i    N(   RS   RT   (   RU   RV   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pys	   <genexpr>C  s    R   R(   (   RP   RQ   RR   (   RW   RA   RB   R   RX   R   R   RZ   R   R)   R   RY   R   (   R#   R[   R\   RH   R    R|   R4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt9   test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum:  s    1c         C` s   t  j j d  x t d d  D] } t  j j | |  d t  j j | |  } t | d t d | \ } } t | t  j	 j
 | d   xB t d d  D]1 } t | d t d | \ } } t | |  q Wq  Wd  S(	   Ni  i   i   y              ?R(   Ru   i   i
   (   R   R<   R=   R>   t   randR?   R   R)   R   RA   t   matrix_power(   R#   RD   R    t   A_sqrtm_defaultR4   Ru   t   A_sqrtm_new(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_blocksizesO  s    ,c         C` sf   t    } t | d t \ } } | j |  } t | | d d t t j |  t j |   d  S(   NR(   R1   gh㈵>(   R!   R   R)   R   R   R   t   tril(   R#   R    R|   R4   R5   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt%   test_al_mohy_higham_2012_experiment_1Z  s
    	c      	   C` s   x t  t f D] } t j d d d d g d d d d g d d d d g d d d d g g d | } t | d t \ } } t t j |  j    q Wd  S(   Ni    i   R   R(   (	   t   intR   R   R   R   R)   R   t   isnant   all(   R#   Rb   R    R|   R4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_strict_upper_triangularb  s    c         C` s   x t  t f D] } t j d d d g d d d g d d d g g d | } t j d d d g d d d g d d d g g d | } t | | j |   t | d t \ } } t t j	 |  j
    q Wd  S(   Ni    i   R   R(   (   R   R   R   R   R	   R   R   R)   R   R   R   (   R#   Rb   R    Rk   t   B_sqrtmR4   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_weird_matrixm  s    c         C` sa   d d l  m } t j j d  t j j d d  } t | d t } t | j	 |  |  d  S(   Ni    (   t   StringIOi  i   R(   (
   t   ioR   R   R<   R=   R   R   t   TrueR   R   (   R#   R   R    Rk   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt	   test_disp~  s
    c         C` sl   d d g d d g g } d
 d g d d g g } t  t j | |  | d d	 t  t |  | d d	 d  S(   Ny               @i   i    y               i   y              ?i   R2   g+=y      ?      ?y      ?      (   R   R   R   R   (   R#   RG   t   R(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRs     s    c      	   C` s   t  j d d d d g d d d d g d d d d g d d d d g g  } t  j t d  d d t d  g d d d d g d d d d g t d  d d t d  g g  } t t  j | |  | d d t t |  | d d d  S(   Ni   i    g      ?R2   g+=(   R   R   R   R   R   R   (   R#   RG   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_gh4866  s    !$c         C` sr   t  j d d d g  } t  j t d  d d g  } t t  j | |  | d d t t |  | d d d  S(   Ni   i   i    R2   g+=(   R   t   diagR   R   R   R   (   R#   RG   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_gh5336  s    c         C` sZ   t  j d  } t  j d  } t t  j | |  | d d t t |  | d d d  S(   Ni   R2   g+=(   i   i   (   i   i   (   R   t   zerosR   R   R   (   R#   RG   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_gh7839  s    (   R-   R.   RM   RO   R{   R}   R~   R   R   R   R   R   Rs   R   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRt      s   	
	
											t   TestFractionalMatrixPowerc           B` sw   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 e
 j j d d	  d
    Z d   Z RS(   c         C` s   t  j j d  x t d d  D] } x t d d  D] } t  j j | |  d t  j j | |  } x\ t  j d d d  D]E } | | } t | d |  } t  j j | |  } t	 | |  q~ Wq6 Wq  Wd  S(   Ni  i   i   y              ?ii   i	   (
   R   R<   R=   R>   R?   R@   R   RA   R   R   (   R#   t   pRD   RE   RF   RG   t   M_rootRN   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRO     s    ,
c         C` s   t  j j d  x t d d  D] } x t d d  D]z } t  j j | |  } x\ t  j d d d  D]E } | | } t | d |  } t  j j | |  } t	 | |  qg Wq6 Wq  Wd  S(   Ni  i   i   ii   i	   (
   R   R<   R=   R>   R?   R@   R   RA   R   R   (   R#   R   RD   RE   RF   RG   R   RN   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRM     s    
c         C` s   t  j j d  x d D] } x t d  D] } t  j j | |  d t  j j | |  } t | d  } t  j j | d  } t | |  t | d  } t  j j | d	  } t | |  t | d
  } t  j j | d  } t | |  q* Wq Wd  S(   Ni  i   i   i   i
   y              ?g?gigffffff@i   (   i   i   i   (	   R   R<   R=   R>   R?   R   RA   R   R   (   R#   RD   t   iRG   t   M_one_fifthRN   Rc   Rd   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt(   test_larger_abs_fractional_matrix_powers  s    ,c         C` s  t  j j d  d } x t |  D] } t j d d  } t  j j   } t  j t j d d   } t  j j | |  } t j t t	 f  r | d t  j j | |  } n  | | } t
 | |  } t | d t	 \ } }	 t | |  }
 t | |
  q# Wd  S(   Ni  i   i   i   iy              ?R(   (   R   R<   R=   R>   t	   randrangeR?   t   expt   choiceR   R)   R   R   R   R   (   R#   t   nsamplesR   RD   R   t   matrix_scaleR    t   A_powerR3   R4   t   A_power_expm_logm(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_random_matrices_and_powers  s     
c   	      C` s   t    } t | t j d t \ } } t | d t \ } } t j | d  } t | d  } t	 | |  t
 | |  t
 | |  xn d	 d
 f D]` } t | |  } t | d |  } t
 | | d d t
 t j | d  t j | d   q Wd  S(   NR(   g      ?i   i   i   i   R1   g{Gz?g      ?g?(   R!   R   R   R   R)   R   R   t   _remainder_matrix_powerR   R	   R   R   (	   R#   R    t   A_funm_sqrtR4   R|   t   A_rem_powerR   R   R5   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR     s    	c         C` s   t  j j d  x| t  j j d  d t  j j d  D]T } xK t d  D]= } t j | |  } | t  j |  d } t | |  qJ Wq7 Wd  S(   Ni  i
   y              ?i   i   (	   R   R<   R=   R?   R>   R   t   _briggs_helper_functiont   exp2R   (   R#   R$   t   kt
   x_observedt
   x_expected(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_briggs_helper_function  s    -c         C` s\  d } xOd d g d d g g d d g d d g g d d g d d g g d d g d d g g f D] } t  j j |  } t t d   | D   x d D] } t j | d t } t | |  } t | j	 j
 | k  t j | d t } t | |  } t | j	 j
 | k  t j | d t } t | |  } t | j	 j
 | k  q Wqa Wd  S(   NRP   RQ   RR   i   i    i   i   c         s` s'   |  ] } | j  p | j d  k  Vq d S(   i    N(   RS   RT   (   RU   RV   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pys	   <genexpr>  s    g333333gg?gffffff
@R   (   RP   RQ   RR   (   g333333gg?gffffff
@(   RW   RA   RB   R   RX   R   R   R   R   R   RY   RZ   (   R#   R[   R\   RH   R   R    R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt%   test_type_preservation_and_conversion  s$    c         C` s  d } xd d g d d g g d d g d d g g d d d g d d d g d d d g g f D] } t  j j |  } t t d   | D   x d D]z } t j | d t } t | |  } t | j	 j
 | k  t j | d t } t | |  } t | j	 j
 | k  q Wq^ Wd  S(   NRP   RQ   RR   i   i    ic         s` s'   |  ] } | j  p | j d  k  Vq d S(   i    N(   RS   RT   (   RU   RV   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pys	   <genexpr>3  s    g333333gg?gffffff
@R   (   RP   RQ   RR   (   g333333gg?gffffff
@(   RW   RA   RB   R   RX   R   R   RZ   R   R   RY   R   (   R#   R[   R\   RH   R   R    R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt3   test_type_conversion_mixed_sign_or_complex_spectrum*  s    1t   reasons   Too unstable across LAPACKs.c         C` s   xd d g d d g g d d g d d g g d d g d d g g d d d g d d d g d d d g g f D] } x t  t f D] } t j | d | } x6 d D]. } t | |  } t t j |  j    q Wx= d D]5 } t | |  } t | d |  } t | |  q Wq Wqm Wd  S(   Ni    i   i   i   i   iR   gffffffgg333333gg?gzG?(   gffffffgg333333g(   g?gzG?(	   R   RZ   R   R   R   R   R   R   R   (   R#   R\   t   newtypeR    R   R   R5   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_singularC  s    1c         C` so   d d g d d g g } d d g d d g g } t  t j | |  | d d	 t  t | d
  | d d	 d  S(   Ny               @i   i    y               i   y              ?i   R2   g+=g      ?y      ?      ?y      ?      (   R   R   R   R   (   R#   RG   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyRs   W  s    (   R-   R.   RO   RM   R   R   R   R   R   R   t   pytestt   markt   xfailR   Rs   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR     s   							#	t   TestExpMc           B` s   e  Z d    Z d   Z RS(   c         C` sG   t  d d g d d g g  } t t |  d d g d d g g  d  S(   Ng        i    i   (   R   R   R   (   R#   R$   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt	   test_zero_  s    c         C` s   d d l  m } d } d } | | g g d d } | | g g d d } t |  } t |  } t t |  t |   t t |  t |   t | d t d d   t | d t d	 d
   d  S(   Ni    (   t
   csc_matrixy        ~6 y        vR   RZ   gGj/ܿghкg藣EgG)| ((   i    i    (   i    i    (   t   scipy.sparseR   R   R   t   typeR   RZ   (   R#   R   t   vOnet   vTwot   mOnet   mTwot   outOnet   outTwo(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_single_eltc  s    
(   R-   R.   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR   ^  s   	t   TestExpmFrechetc           B` sV   e  Z d    Z d   Z d   Z d   Z e j j e j j	 d d  d     Z
 RS(   c   	      C` s7  t  j d d d d g d d d d g d	 d	 d d g d	 d	 d d g g d
 t } t  j d d g d d g g d
 t } t  j d d g d d g g d
 t } t j j |  } t j j |  d  d  d d   f } xW i  i d d 6i d d 6f D]8 } t | | |  \ } } t | |  t | |  q Wd  S(   Ni   i   i   i   i   i   i   i   i    R   t   SPSt   methodt   blockEnlarge(   R   R   R   RW   RA   R   R   R   (	   R#   RG   R    Rn   t   expected_expmt   expected_frechett   kwargst   observed_expmt   observed_frechet(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_expm_frechet{  s(    					($c         C` s  t  j d d d d g d d d d g d	 d	 d d g d	 d	 d d g g d
 t } t  j d d g d d g g d
 t } t  j d d g d d g g d
 t } t j j | d  } d d d d d d d d g } t | d  | d  } x | D] \ } } t j j j | }	 t j j j | }
 d |	 |
 } | | } | | } | | } | | } t j j	 |  } t j j	 |  d  d  d d   f } t
 | |  \ } } t | |  t | |  q Wd  S(   Ni   i   i   i   i   i   i   i   i    R   i	   i   i   i   ig      ?(   R   R   R   RW   RA   R   t   zipt   _expm_frechett   ell_table_61R   R   R   (   R#   t
   M_originalt
   A_originalt
   E_originalt   A_original_norm_1t   selected_m_listt   m_neighbor_pairst   mat   mbt   ell_at   ell_bt   target_norm_1RF   RG   R    Rn   R   R   R   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_small_norm_expm_frechet  s<    					



(c         C` s}  t  j j t  j j t  j j t  j j f } d } xFt |  D]8} t j |  } t j d  } t j	 d d  } | d | | f  } | d | | f  } t
 j j | d  }	 | |	 }
 |
 | } |
 | } t  j t  j | | g  t  j t  j |  | g  g  } t
 j j |  } t
 j j |  d  |  | d   f } t | |  \ } } t | |  t | |  q= Wd  S(   Nid   g      ?i   i   t   sizei   (   R   R<   t   uniformt   normalt   standard_cauchyt   exponentialR>   R   t   expovariateR   RW   RA   R   t   vstackt   hstackt
   zeros_likeR   R   R   (   R#   t   rfuncst   ntestsR   t   rfuncR   RD   R   R   R   RF   R    Rn   RG   R   R   R   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt	   test_fuzz  s.    			


$(c         C` s   t  j d d g d d g g d t } t  j d d g d d	 g g d t } t j j | d
  } t | | d d \ } } t | | d d \ } } t | |  t | |  d  S(   Ng]؉??gvP?g^?guÝ?R   gS,?g| @gJt?g~3?i   R   R   R   (   R   R   R   RW   RA   R   R   R   (   R#   R    Rn   t   A_norm_1t   sps_expmt   sps_frechett   blockEnlarge_expmt   blockEnlarge_frechet(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_problematic_matrix  s    				R   s   this test is deliberately slowc         C` s   d } t  j j d | | f  } t  j j d | | f  } t | | d d \ } } t | | d d \ } } t | |  t | |  d  S(   Ni  R   R   R   R   (   R   R<   R   R   R   (   R#   RD   R    Rn   R   R   R   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_medium_matrix  s    (   R-   R.   R   R   R   R   R   R   t   slowt   skipR   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR   y  s   		!			c   
      C` s`   t  j | |  j  } t |  } | | | | } t |  |  } t | |  | | }	 |	 S(   N(   R   t   reshapeRv   R   R   (
   R    t   A_normRc   t   X_normt   epsR   t   p_normt   perturbationt   X_primet   scaled_relative_error(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   _help_expm_cond_search  s    c         C` s$   |  t  j j |  t  j j |   S(   N(   RW   RA   R   (   R    Rk   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   _normalized_like  s    c         C` s4   |  |  } |  | |  } t  | |  t  |  S(   N(   R   (   t   fR    R   Rc   R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   _relative_error  s    t   TestExpmConditionNumberc           B` s8   e  Z d    Z d   Z d   Z e j j d    Z RS(   c         C` s\   t  j j d  xE t d d  D]4 } t  j j | |  } t |  } t d |  q  Wd  S(   Ni  i   i   i    (   R   R<   R=   R>   R?   R   R
   (   R#   RD   R    t   kappa(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_expm_cond_smoke  s
    c         C` sh   t  j d d d d g d d d d g d d d	 d
 g d d d d g g  } t |  } t d |  d  S(   Ng(gٙBgx@g  =g ZdBi    gzNV7g@g  2pgᙥT g?W[E@gT!g yhG(   R   R   R   R
   (   R#   R    R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_expm_bad_condition_number
  s    c         C` s  t  j j d  xN t  j d d d d D]4 } t  j | g g  } t t |  t |   q) WxN t  j d d d d D]4 } t  j | g g  } t t |  t |   qz WxI t	 d  D]; } t  j j
 d	 d	  } t t |  t  j |  d  q Wd  S(   Ni90  ii   t   numi   ii   i
   i   i    (   i    i    (   R   R<   R=   t   linspaceR   R   R   t   absR@   R>   R?   R^   (   R#   t   xR    R   (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_univariate  s    c         C` s  t  j j d  d } d } xt |  D]} t  j j d d  } t  j j | |  } t j j |  } t	 |  } t j j |  } t
 |  }	 t j t | | | | |  }
 t  j | |  } t |
 | d d } | j } |
 |  } | t t  j | | j  |  } t t	 | |  } t | | |  xn t d  D]` } | t t  j j | j   |  } t t |  t |   t t	 | |  } t | |  qCWt | d d | | |	  q) Wd  S(	   Ni90  gh㈵>i
   i   i   R   s   L-BFGS-Bi   (   R   R<   R=   R>   t   randintR?   RW   RA   R   R   R   t	   functoolst   partialR   t   onesR   R  R   R   Rv   R   R   R
   (   R#   R   R   R   RD   R    R   Rc   R   R   R   t   guesst   outt   xoptt   yoptt   p_bestt   p_best_relerrt   jt   p_randt   p_rand_relerr(    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   test_expm_cond_fuzz   s2    		""(	   R-   R.   R   R   R  R   R   R   R  (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyR     s   		
	(6   t   __doc__t
   __future__R    R   R   R<   R  t   numpyR   R   R   R   R   R   R   t   numpy.testingR	   R
   R   R   R   R   R   R   t   scipy._lib._numpy_compatR   R   t   scipy.linalgRW   R   R   R   R   R   R   R   R   R   R   t   scipy.linalg._expm_frechett   scipy.optimizeR   R!   t   objectR"   R/   Rt   R   R   R   R   R   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/linalg/tests/test_matfuncs.pyt   <module>   s0   .4@	+v				