
ʽXc           @` 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 d d l m Z d d l m Z m Z m Z m Z m Z m Z m Z d d l m Z m Z d d l m
 Z d d	 l m Z m Z m Z m  Z  m! Z! d d
 l" m# Z# d d l$ m% Z% d d l Z& d d l' Z& d   Z( d   Z) d e f d     YZ* d e f d     YZ+ e, d k re   n  d S(   s2    Test functions for scipy.linalg.matfuncs module

i    (   t   divisiont   print_functiont   absolute_importN(   t   arrayt   eyet   expt   random(   t   matrix_power(   t   TestCaset   run_module_suitet   assert_allcloset   assert_t   assert_array_almost_equalt   assert_equalt   assert_array_almost_equal_nulp(   t
   csc_matrixt   SparseEfficiencyWarning(   R   (   t   expmt   _expmt   ProductOperatort   MatrixPowerOperatort   _onenorm_matrix_power_nnm(   t   logm(   t	   factorialc         C` s   |  t  |   k s |  d k  r- t d   n  t  |   }  | t  |  k sW | d k  rf t d   n  t  |  } t | |   \ } } t j d |  |  } | t j d |   } t j | g |  | |  t j | g | | |   S(   sj  
    A helper function for testing matrix functions.

    Parameters
    ----------
    n : integer greater than 1
        Order of the square matrix to be returned.
    p : non-negative integer
        Power of the matrix.

    Returns
    -------
    out : ndarray representing a square matrix
        A Forsythe matrix of order n, raised to the power p.

    i   s#   n must be an integer greater than 1i    s    p must be a non-negative integerg      $@(   t   intt
   ValueErrort   divmodt   npt   powert   diag(   t   nt   pt   at   bt   larget   small(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   _burkardt_13_power   s    c          C` s   t  j j d  x t d d  D]{ }  xr t d  D]d } t  j j |  |  f  } t  j j | |  } t | |  } t  j j | d  } t | |  q3 Wq  Wd  S(   Ni  i   i   (	   R   R   t   seedt   ranget   linalgR   R   t   normR
   (   R   R   t   Mt   Mpt   observedt   expected(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_onenorm_matrix_power_nnm?   s    t   TestExpMc           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 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` 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   (   t   selfR    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_zero_ndarrayK   s    c         C` sM   t  d d g d d g g  } t t |  j   d d g d d g g  d  S(   Ng        i    i   (   R   R   R   t   toarray(   R/   R    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_zero_sparseO   s    c         C` sJ   t  j d d g d d g g  } t t |  d d g d d g g  d  S(   Ng        i    i   (   R   t   matrixR   R   (   R/   R    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_zero_matrixS   s    !c         c` s?  t  t j d g g   } t t  d  | f Vt t  d g g  | f Vt t  t j d g g   | f Vt t  t j d g g   | f Vt t  t d g g   | f Vt  t j d g g   } t t  d  | f Vt t  d g g  | f Vt t  t j d g g   | f Vt t  t d g g   | f Vd  S(   Ni   y              ?(   i   (   (   i   (   y              ?(   (   y              ?(   R   R   R   R
   R3   R   (   R/   t   At   B(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_misc_typesW   s    ## #c         C` s   t  d d d g d d d g d d d g g d t } t j d  } t j d  } t j | d | d | d | g d | d | | g d d | g g d t } t |  j   } t | |  d  S(   Ni   i   i    i   i   t   dtypei   (	   R   t   floatt   mathR   R   R   R   R1   R   (   R/   R5   t   e1t   e2R,   R+   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_bidiagonal_sparsed   s    c         C` s   x t  j t  j g D]w } xn d d d d d g D]W } | t d d | } t |  } t |  t d d | } t | | d d	 q/ Wq Wd  S(
   Ng{Gz?g?g      ?i   i
   i   R8   t   nulpid   (   R   t   float32t   float64R   R   R   R   (   R/   R8   t   scaleR5   R+   R,   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_padecases_dtype_floatr   s    c         C` s   x t  j t  j g D]w } xn d d d d d g D]W } | t d d | } t |  } t |  t d d | } t | | d d	 q/ Wq Wd  S(
   Ng{Gz?g?g      ?i   i
   i   R8   R>   id   (   R   t	   complex64t
   complex128R   R   R   R   (   R/   R8   RA   R5   R+   R,   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_padecases_dtype_complexz   s    c         C` s   t  j } t j    t j d d t x d d d d d g D] } | t d d d	 | d
 d } t |  t d d	 | } t	 | d t
 j   } t	 | d t j   } t | | d d t | | d d q? WWd  QXd  S(   Nt   ignoret   categoryg{Gz?g?g      ?i   i
   i   R8   t   formatt   csct   use_exact_onenormR>   id   (   R   R@   t   warningst   catch_warningst   simplefilterR   t   speyeR   R   R   t   TrueR1   t   FalseR   (   R/   R8   RA   R    t   et   exact_onenormt   inexact_onenorm(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt!   test_padecases_dtype_sparse_float   s    	c         C` s   t  j } t j    t j d d t xw d d d d d g D]` } | t d d d	 | d
 d } t |  t d d	 | } t	 t
 |  j   | d d q? WWd  QXd  S(   NRF   RG   g{Gz?g?g      ?i   i
   i   R8   RH   RI   R>   id   (   R   RD   RK   RL   RM   R   RN   R   R   R   R   R1   (   R/   R8   RA   R    RQ   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt#   test_padecases_dtype_sparse_complex   s    	c      	   C` s   t  j d  x t j t j g D] } x t d d  D] } x d d d d d d d	 g D]x } t |  t  j | |  | j |  } t j	 |  r | d
 t  j | |  | } n  t
 t t |   |  qX Wq6 Wq  Wd  S(   Ni  i   i
   g-C6?gMbP?g{Gz?g?g      $@g      Y@y              ?(   R   R%   R   R@   RD   R&   R   t   randt   astypet   iscomplexobjR   R   R   (   R/   R8   R   RA   R5   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_logm_consistency   s    ")!c         C` sl   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 |  t d |   d  S(   Nii   g      ?(   R   R   R
   R   (   R/   t   Q(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_integer_matrix   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	 d
 d g d d d d g d d d d g d d d d g g d t } t t |  | d d t j d  d } | j   } | | d <t |  } d } d | } t t  j	 | | d | d |  d  S(   Ng3d?g     L@i    gRal!A?gQI?g^?R8   g<gGgx@g9=g[dBg        g'V7gZ@g2pgѤT g\GeE@gPǆ!t   rtolg-C6?i  gFFg<i   id   t   atol(   i   i    (
   R   R   R9   R
   R   R   R%   t   copyR   t   allclose(   R/   R5   t   A_logmt   tinyt   A_logm_perturbedt   A_expm_logm_perturbedR\   R]   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_triangularity_perturbation   s2    					

c         C` s   t  j d  } t  j d  } t  j d d g d d g g d t } t  j | d g d | g g d t } t |  } t | |  d  S(   Ni   i   i    R8   (   R   R   R   R9   R   R
   (   R/   t   exp1t   exp2R5   t   desiredt   actual(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_1   s    				c         C` sk   t  j d d g d d g g d t } t  j d d g d d g g d t } t |  } t | |  d  S(	   Ni   i   i   R8   gkQC@gb]IG@gd]IG@gJ[K@(   R   R   R9   R   R
   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_2   s    				c         C` s   t  j d  } t  j d  } t  j d d g d d g g d t } t  j d d | d d | t  j d  d | g d t  j d  d | d	 d | d d | g g d t } t |  } t | |  d  S(
   Ni   i'   i    iiR8   i&   ii(   R   R   R   R9   t   expm1R   R
   (   R/   Re   t   exp39R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_3  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 d d g d d g g d t } t  j d d
 g d t } t  j | t  j |  |  } t |  } t | |  d  S(   Nii   ii   R8   i   i   i   i   iiig      g      ?(   R   R   R9   t   dotR   R   R
   (   R/   R5   t   Ut   Vt   wRg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_4  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 d d g d d d d g d d d d g d d d d g g d t } t |  } t | |  d  S(   Ni    i   R8   i   i   i$   (   R   R   R9   R   R
   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_5(  s    		c         C` sz   t  j d  } t  j d d g d d g g d t } t  j | | g d | g g d t } t |  } t | |  d  S(   Ni   i    R8   (   R   R   R   R9   R   R
   (   R/   Re   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_6<  s    				c         C` s   t  j d  } t  j d  } t  j d | d g d d | g g d t } t  j | | g d | g g d t } t |  } t | |  d  S(   Ni   i    R8   (   R   R   t   spacingR   R9   R   R
   (   R/   Re   t   epsR5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_7L  s    			c         C` s   t  j d  } t  j d  } t  j d d d g d d d g d d d g g d	 t } t  j d
 | | d
 | d | d | d | g d | | d | d | d | d | g d | d | d | g g d	 t d } t |  } t | |  d  S(   Ni   i   i   i   i   iiiR8   i   i   i   iig      ?(   R   R   R   R9   R   R
   (   R/   t   exp4t   exp16R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_8^  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 d d g d	 d
 d d g d d d
 d g d d d	 d g g d t } t |  } t | |  d  S(   Ni   i   i   R8   gfa%@g@gX21@g鷯g)@g^Iچ@g|Pk܂@g'@gv@gBfg;@gDl{3@(   R   R   R9   R   R
   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_9o  s    		c         C` s   t  j d d d g d d d g d d d g g d t } t t t j j |   d  t  j d d	 d
 g d d	 d g d d d g g d t } t |  } t | |  d  S(   Ni   i   i    i   R8   i   i   gl$^{b@g
|f@g.Q@g\"N_@g
|V@g\"N_@gLud@gs[@(   i   i   i   (	   R   R   R9   R
   t   sortedt   scipyR'   t   eigvalsR   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_10  s    		c         C` s   t  j d d d g d d d g d d d g g d t } t t j j |  d  t  j d d d g d d d g d d d g g d t } t |  } t | |  d  S(   Ng!=@gl?gQPgt 9@g誉\!@g0n2A@R8   i   i   i(   gJކ3Cg;%s1PgMSUc[g;%s1Pgcx
MjCgO}vCg˂C(   i   i   i(   (   R   R   R9   R
   R}   R'   t   eigvalshR   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_11  s&    		c         C` s   t  j d d d g d d d g d d d	 g g d
 t } t t t j j |   d  t  j d d d g d d d g d d d g g d
 t } t |  } t | |  d  S(   Ni}i   i   izi8   i6   i}i9   i4   R8   iiig)'g13V?g-RR?gǣg׃4V?g3?gWNx`gp?g}mR?(   iii(	   R   R   R9   R
   R|   R}   R'   R~   R   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_12  s    		c   	   	   C` sZ  t  d d  } d d d d g d d d d g d d d d g d d d d g g } t | |  x d
 D] } t d t t j d |    } t j | | f d	 t } x t | |  D]s } t  | |  } t	 t j
 |  d  t t j |  t j d t j | |  |   | | t |  7} q Wt t  | d   } t | |  qe Wd  S(   Ni   i   i    g-C6?i   i   i
   i   R8   (   i   i   i   i
   (   R$   R
   t   maxR   R   t   ceilt   zerosR9   R&   R   t   minR   t   floorR   R   (	   R/   t	   A4_actualt
   A4_desiredR   t   kRg   R   t   ApRh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_13  s     "4c         C` s   t  j d d d g d d d d g d d d g g d
 t } t  j d d d g d d d g d d d g g d
 t } t |  } t | |  d  S(   Ni    g:0yE>g    _Bg    ׷Ag      @ig      i@g      @g      iR8   g .?gzDv>g1O?gvUg԰gLg@sDQg F~?gg=>gcE?gUUUUʏAgP@gP(   R   R   R9   R   R
   (   R/   R5   Rg   Rh   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_burkardt_14  s    		(   t   __name__t
   __module__R0   R2   R4   R7   R=   RB   RE   RT   RU   RY   R[   Rd   Ri   Rj   Rm   Rr   Rs   Rt   Rw   Rz   R{   R   R   R   R   R   (    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyR.   J   s4   									
			"	(												t   TestOperatorsc           B` s   e  Z d    Z d   Z RS(   c   
      C` s  t  j d  d } d } d } x t |  D] } t j  j | |  } t j  j | |  } t j  j | |  } t j  j | |  } t | | |  }	 t |	 j |  | j |  j |  j |   t |	 j	 j |  | j |  j |  j	 j |   q, Wd  S(   Ni  i   i   i
   (
   R   R%   R&   R   t   randnR   R
   t   matmatRn   t   T(
   R/   R   R   t   nsamplest   iR5   R6   t   Ct   Dt   op(    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_product_operator  s    1c   	      C` s   t  j d  d } d } d } d } x t |  D] } t j  j | |  } t j  j | |  } t | |  } t | j |  t | |  j	 |   t | j
 j |  t | |  j
 j	 |   q2 Wd  S(   Ni  i   i   i   i
   (   R   R%   R&   R   R   R   R
   R   R   Rn   R   (	   R/   R   R   R   R   R   R5   R6   R   (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   test_matrix_power_operator  s    ((   R   R   R   R   (    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyR     s   	t   __main__(-   t   __doc__t
   __future__R    R   R   R:   RK   t   numpyR   R   R   R   R   t   numpy.linalgR   t   numpy.testingR   R	   R
   R   R   R   R   t   scipy.sparseR   R   t   scipy.sparse.constructRN   t   scipy.sparse.linalg.matfuncsR   R   R   R   R   t   scipy.linalgR   t   scipy.specialR   R}   t   scipy.sparse.linalgR$   R-   R.   R   R   (    (    (    sF   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_matfuncs.pyt   <module>   s*   "4(	 	 