ó
\K]c           @  s  d  d l  m Z m Z d  d l Z d  d l Z d  d l m Z m Z d  d l Z d  d l	 Z	 d  d l
 m Z m Z d  d l Z d  d l Z d  d l m Z d  d l m Z m Z d  d l m Z d d	 l m Z m Z d d
 l m Z m Z m Z e j ƒ  d k Z y d  d l  Z! e" Z# Wn e$ k
 r3e% Z# n Xe j& e# d ƒ Z' d „  Z( d „  Z) d „  Z* d e f d „  ƒ  YZ+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d d „ Z2 d „  Z3 d  d „ Z4 d „  Z5 d d „ Z6 d „  Z7 d „  Z8 e9 d  „ Z: e9 d! „ Z; e9 d" „ Z< d# „  Z= d$ d% „ Z> d& „  Z? e d d' f k rXe9 d( „ Z@ n	 d) „  Z@ d* „  ZA d+ e f d, „  ƒ  YZB d- e f d. „  ƒ  YZC d/ eB f d0 „  ƒ  YZD d1 eB f d2 „  ƒ  YZE d3 eB f d4 „  ƒ  YZF d5 eB f d6 „  ƒ  YZG d7 eB f d8 „  ƒ  YZH d9 eB f d: „  ƒ  YZI d; eI f d< „  ƒ  YZJ d= eI f d> „  ƒ  YZK d? eB f d@ „  ƒ  YZL dA eB f dB „  ƒ  YZM dC eI f dD „  ƒ  YZN dE eB f dF „  ƒ  YZO dG eI f dH „  ƒ  YZP dI eB f dJ „  ƒ  YZQ dK eB f dL „  ƒ  YZR dM eI f dN „  ƒ  YZS eT dO k re jU ƒ  n  d S(P   iÿÿÿÿ(   t   divisiont   print_functionN(   t   productt   cycle(   t   Numbert   Integral(   t   unittest_support(   t   jitt   errors(   t   versioni   (   t   TestCaset   tag(   t   matmul_usecaset   needs_matmult
   needs_blast   armv7ls   LAPACK needs Scipy 0.16+c         C  s   t  j |  | ƒ S(   N(   t   npt   dot(   t   at   b(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   dot2   s    c         C  s   t  j |  | d | ƒS(   Nt   out(   R   R   (   R   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   dot3#   s    c         C  s   t  j |  | ƒ S(   N(   R   t   vdot(   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR   '   s    t   TestProductc           B  s%  e  Z d  Z e j e j e j e j f Z d „  Z	 d „  Z
 d „  Z e j d „  ƒ Z d „  Z d „  Z d „  Z e d „ Z d	 d
 „ Z e d „  ƒ Z d „  Z d „  Z e d „  ƒ Z d „  Z e d „  ƒ Z e d ƒ d „  ƒ Z e d „  ƒ Z e d „  ƒ Z  e d „  ƒ Z! e d „  ƒ Z" RS(   s!   
    Tests for dot products.
    c         C  s   t  j ƒ  d  S(   N(   t   gct   collect(   t   self(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   setUp2   s    c         C  sO   t  j | ƒ } t | t  j ƒ r6 | d d j | ƒ S| d d j | ƒ Sd  S(   Ni   y              à?y               @g      à?y      ð?      à¿(   R   t   aranget
   issubclasst   complexfloatingt   astype(   R   t   nt   dtypet   base(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   sample_vector6   s    c         C  s#   |  j  | | | ƒ j | | f ƒ S(   N(   R$   t   reshape(   R   t   mR!   R"   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   sample_matrix?   s    c         c  sÂ   t  j d t ƒ  } t  j d t j ƒ d VWd QX|  j t | ƒ d ƒ |  j | d j	 t j ƒ |  j
 d t | d j ƒ ƒ |  j | d j | j j ƒ |  j | d j | j j d ƒ d S(   sB   
        Check performance warning(s) for non-contiguity.
        t   recordt   alwaysNi   i    s   faster on contiguous arrays(   t   warningst   catch_warningst   Truet   simplefilterR   t   NumbaPerformanceWarningt   assertGreaterEqualt   lent   assertIst   categoryt   assertInt   strt   messaget   assertEqualt   filenamet   __code__t   co_filenamet   linenot   co_firstlineno(   R   t   pyfunct   w(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_contiguity_warningB   s    c      	   C  sK   |  j  ƒ  9 | | Œ  } | | Œ  } |  j | | d t ƒ~ ~ Wd  QXd  S(   Nt   ignore_sign_on_zero(   t   assertNoNRTLeakt   assertPreciseEqualR,   (   R   R<   t   cfunct   argst   expectedt   got(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   check_funcQ   s
    c         C  sý   | j  d | j d } | j  | j } t j | d t j ƒ} xW t | j d ƒ D]6 } | | | | !j d | j ƒ } | j j	 rT PqT qT Wt
 d ƒ ‚ | j j rÄ t j | | j d d ƒ} n t j | | j d d ƒ} | | (| j j	 sù t ‚ | S(   Ni   R"   s   Could not obtain aligned arrayt   ordert   Ct   F(   t   sizet   itemsizeR   t   emptyt   uint8t   ranget   viewR"   t   flagst   alignedt	   Exceptiont   c_contiguousR%   t   shapet   AssertionError(   R   t   arrRJ   t   datasizet   tmpt   it   new(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   _aligned_copyY   s     c      	   C  s›   t  r |  j n t j } |  j ƒ  q | | ƒ } | | ƒ } |  j | d | | Œ | ƒ |  j | d | | Œ | ƒ |  j | | d t ƒ~ ~ Wd  QXd  S(   NR   R?   (   t
   _is_armv7lR[   R   t   copyR@   R1   RA   R,   (   R   R<   RB   RC   R   t   copierRD   RE   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_func_outn   s    c         C  sQ   |  j  t ƒ  } | | Œ  Wd  QX| r. d n d } |  j | t | j ƒ ƒ d  S(   Ns   incompatible output array sizes   incompatible array sizes(   t   assertRaisest
   ValueErrorR3   R4   t	   exception(   R   RB   RC   t   is_outt   raisest   msg(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_mismatching_sizesx   s
    s   np.dot()c         C  sI   |  j  t j ƒ  } | | Œ  Wd  QX|  j d | f t | j ƒ ƒ d  S(   Ns)   %s arguments must all have the same dtype(   R`   R   t   TypingErrorR3   R4   Rb   (   R   RB   RC   t	   func_nameRd   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_mismatching_dtypes   s
    	c      	   C  s-  d } t  d t ƒ | ƒ } x |  j D]v } |  j | | ƒ } |  j | | ƒ } |  j | | | | f ƒ |  j | | | d  d  d … | d  d  d … f ƒ q% W|  j | d t j ƒ } |  j | t j ƒ } |  j | | | f ƒ |  j | t j ƒ } |  j | t j ƒ } |  j	 | | | f d | ƒd  S(   Ni   t   nopythoniÿÿÿÿi   Rh   (
   R   R,   t   dtypesR$   RF   R   t   float64Rf   t   float32Ri   (   R   R<   Rh   R!   RB   R"   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_dot_vv†   s    7c         C  s   |  j  t d ƒ d S(   s/   
        Test vector * vector np.dot()
        s   np.dot()N(   Rn   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_dot_vvš   s    c         C  s   |  j  t d ƒ d S(   s    
        Test np.vdot()
        s	   np.vdot()N(   Rn   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt	   test_vdot    s    c           s"  d \ } } ‡  f d †  } t  d t ƒ | ƒ } | d  k	 rT t  d t ƒ | ƒ } n  xR | | | ƒ D]A \ }	 }
 ˆ  j | | |	 |
 f ƒ ˆ  j | | |
 |	 j f ƒ qd W| d  k	 r+xs | | | ƒ D]_ \ }	 }
 t j | d |	 j ƒ} ˆ  j | | |	 |
 f | ƒ ˆ  j | | |
 |	 j f | ƒ qÅ Wn  ˆ  j	 | | d t j
 ƒ }	 ˆ  j | t j
 ƒ }
 ˆ  j | |	 |
 f ƒ ˆ  j | |
 |	 j f ƒ | d  k	 rkt j | t j
 ƒ } ˆ  j | |	 |
 | f ƒ ˆ  j | |
 |	 j | f ƒ ˆ  j	 | | t j
 ƒ }	 ˆ  j | t j
 ƒ }
 t j | d t j
 ƒ } ˆ  j | |	 |
 | f d t ƒˆ  j | |
 |	 j | f d t ƒn  ˆ  j	 | | t j ƒ }	 ˆ  j | t j
 ƒ }
 ˆ  j | |	 |
 f | ƒ | d  k	 rˆ  j	 | | t j
 ƒ }	 ˆ  j | t j
 ƒ }
 t j | t j ƒ } ˆ  j | |	 |
 | f | ƒ n  d  S(	   Ni   i   c         3  sÄ   xR d D]J } ˆ  j  |  | t j ƒ j d | ƒ } ˆ  j | t j ƒ } | | f Vq WxC ˆ  j D]8 } ˆ  j  |  | | ƒ } ˆ  j | | ƒ } | | f Vq_ W| d  d  d … | d  d  d … f Vd  S(   Nt   CFRG   iÿÿÿÿ(   R'   R   Rl   R]   R$   Rk   (   R&   R!   RG   R   R   R"   (   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   samplesª   s    $Rj   R"   i   Rc   (   i   i   (   R   R,   t   NoneRF   t   TR   RL   R"   R_   R'   Rl   R$   Rf   Rm   Ri   (   R   t   pyfunc2t   pyfunc3Rh   R&   R!   Rr   t   cfunc2t   cfunc3R   R   R   (    (   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_dot_vm¦   sD     &%c         C  s   |  j  t t d ƒ d S(   sC   
        Test vector * matrix and matrix * vector np.dot()
        s   np.dot()N(   Ry   R   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_dot_vmÚ   s    c           s?  ‡  f d †  } t  d t ƒ | ƒ } | d  k	 rH t  d t ƒ | ƒ } n  x'd	 d
 d g D]\ } } }	 xX | | | |	 ƒ D]D \ }
 } ˆ  j | | |
 | f ƒ ˆ  j | | | j |
 j f ƒ qz W| d  k	 rX x | | | |	 ƒ D]† \ }
 } t j | | f d |
 j ƒ} ˆ  j | | |
 | f | ƒ t j | | f d |
 j ƒ} ˆ  j | | | j |
 j f | ƒ qá WqX qX Wd \ } } }	 ˆ  j	 | |	 d t j
 ƒ }
 ˆ  j	 |	 | t j
 ƒ } ˆ  j | |
 | f ƒ | d  k	 r|t j | | f t j
 ƒ } ˆ  j | |
 | | f ƒ ˆ  j	 | |	 t j
 ƒ }
 ˆ  j	 |	 | t j
 ƒ } t j | | d f t j
 ƒ } ˆ  j | |
 | | f d t ƒn  ˆ  j	 | |	 t j ƒ }
 ˆ  j	 |	 | t j
 ƒ } ˆ  j | |
 | f | ƒ | d  k	 r;ˆ  j	 | |	 t j
 ƒ }
 ˆ  j	 |	 | t j
 ƒ } t j | | f t j ƒ } ˆ  j | |
 | | f | ƒ n  d  S(   Nc         3  så   xp t  d d ƒ D]_ \ } } ˆ  j |  | t j ƒ j d | ƒ } ˆ  j | | t j ƒ j d | ƒ } | | f Vq WxF ˆ  j D]; } ˆ  j |  | | ƒ } ˆ  j | | | ƒ } | | f Vq} W| d  d  d … | d  d  d … f Vd  S(   NRq   RG   iÿÿÿÿ(   R   R'   R   Rl   R]   Rk   (   R&   R!   t   kt   order_at   order_bR   R   R"   (   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRr   ã   s    $$Rj   i   i   i   i   R"   Rc   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   R   R,   Rs   RF   Rt   R   RL   R"   R_   R'   Rl   Rf   Rm   Ri   (   R   Ru   Rv   Rh   Rr   Rw   Rx   R&   R!   R{   R   R   R   (    (   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_dot_mmà   sF    #-"t	   importantc         C  s   |  j  t t d ƒ d S(   s/   
        Test matrix * matrix np.dot()
        s   np.dot()N(   R~   R   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_dot_mm  s    c         C  s   |  j  t d ƒ d S(   s&   
        Test vector @ vector
        s   '@'N(   Rn   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_matmul_vv!  s    c         C  s   |  j  t d d ƒ d S(   s:   
        Test vector @ matrix and matrix @ vector
        s   '@'N(   Ry   R   Rs   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_matmul_vm(  s    c         C  s   |  j  t d d ƒ d S(   s&   
        Test matrix @ matrix
        s   '@'N(   R~   R   Rs   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_matmul_mm/  s    c   	   	   C  sj  d \ } } } t  j } |  j | | | ƒ d  d  d … } |  j | | | ƒ d  d  d … } t  j | | f | ƒ } t d t ƒ t ƒ } |  j | j ƒ  | | | ƒ Wd  QXt d t ƒ t	 ƒ } |  j | j ƒ  | | | | ƒ Wd  QX|  j
 | | ƒ d  d  d … } |  j
 | | ƒ d  d  d … } t d t ƒ t ƒ } |  j | j ƒ  | | | ƒ Wd  QXd  S(   Ni   i   i   iÿÿÿÿRj   (   i   i   i   (   R   Rl   R'   RL   R   R,   R   R>   t   py_funcR   R$   R   (	   R   R&   R{   R!   R"   R   R   R   RB   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_contiguity_warnings6  s     	""(#   t   __name__t
   __module__t   __doc__R   Rl   Rm   t
   complex128t	   complex64Rk   R   R$   R'   t
   contextlibt   contextmanagerR>   RF   R[   R_   t   FalseRf   Ri   R   Rn   Ro   Rp   Ry   Rz   R~   R   R€   R   R   R‚   Rƒ   R…   (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR   +   s,   							
		4	:c         C  s   t  j j |  ƒ S(   N(   R   t   linalgt   inv(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   invert_matrixO  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   cholesky(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   cholesky_matrixS  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   eig(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   eig_matrixW  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   eigvals(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   eigvals_matrix[  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   eigh(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   eigh_matrix_  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   eigvalsh(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   eigvalsh_matrixc  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   svd(   R   t   full_matrices(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   svd_matrixg  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   qr(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt	   qr_matrixk  s    c         C  s   t  j j |  | | ƒ S(   N(   R   RŽ   t   lstsq(   t   At   Bt   rcond(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   lstsq_systemo  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   solve(   R¡   R¢   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   solve_systems  s    gVçž¯Ò<c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   pinv(   R¡   R£   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   pinv_matrixw  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   slogdet(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   slogdet_matrix{  s    c         C  s   t  j j |  ƒ S(   N(   R   RŽ   t   det(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   det_matrix  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   norm(   R   t   ord(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   norm_matrixƒ  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   cond(   R   t   p(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   cond_matrix‡  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   matrix_rank(   R   t   tol(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   matrix_rank_matrix‹  s    c         C  s   t  j j |  | ƒ S(   N(   R   RŽ   t   matrix_power(   R   R!   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   matrix_power_matrix  s    i    c         C  s   t  j |  | ƒ S(   N(   R   t   trace(   R   t   offset(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   trace_matrix“  s    c         C  s   t  j |  ƒ S(   N(   R   R¸   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   trace_matrix_no_offset—  s    i	   c         C  s   t  j |  | d | ƒS(   NR   (   R   t   outer(   R   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   outer_matrixœ  s    c         C  s   t  j |  | ƒ S(   N(   R   R¼   (   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR½   Ÿ  s    c         C  s   t  j |  | ƒ S(   N(   R   t   kron(   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   kron_matrix£  s    t   TestLinalgBasec           B  s¼   e  Z d  Z e j e j e j e j f Z d „  Z	 d „  Z
 d d d „ Z d „  Z e d „ Z d „  Z d „  Z e d „ Z d	 „  Z d
 „  Z d „  Z d d d „ Z d „  Z d „  Z RS(   sU   
    Provides setUp and common data/error modes for testing np.linalg functions.
    c         C  s   t  j ƒ  d  S(   N(   R   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR   ¯  s    c         C  sO   t  j | ƒ } t | t  j ƒ r6 | d d j | ƒ S| d d j | ƒ Sd  S(   Ni   y              à?y               @g      à?y      ð?      à¿(   R   R   R   R   R    (   R   R!   R"   R#   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR$   ³  s    c         C  s  d } t  | ƒ d k r' t d ƒ ‚ n  | d k rB t d ƒ ‚ n  | t j t j t j t j g k ru t d ƒ ‚ n  | d k	 rœ | d k	 rœ t d ƒ ‚ n  | d k r± | } n  | d	 k  rÌ t d
 ƒ ‚ n  t j j	 d ƒ | \ } } | d k  s | d k  rt d ƒ ‚ n  t
 | | ƒ }	 | d k r3|	 }
 nZ | d k rNt d ƒ ‚ n  t | t ƒ slt d ƒ ‚ n  | }
 | |	 k rt d ƒ ‚ n  | d	 k s¥| d	 k rð| | k rÀt d ƒ ‚ n  t | | ƒ } |  j | | ƒ j | | ƒ } n"|  j | | | ƒ j | | ƒ } t j j | ƒ \ } } |  j | | | ƒ d d d … j | | ƒ } t j j | ƒ \ } } t j | | |
 ƒ } t j | | f ƒ } t j t j | | ƒ ƒ } | | | d |
  | d	 |
  f <t j t j | | ƒ | j ƒ } t j | d | d | ƒ} | S(   s÷  
        Provides a sample matrix with an optionally specified rank or condition
        number.

        size: (rows, columns), the dimensions of the returned matrix.
        dtype: the dtype for the returned matrix.
        order: the memory layout for the returned matrix, 'F' or 'C'.
        rank: the rank of the matrix, an integer value, defaults to full rank.
        condition: the condition number of the matrix (defaults to 1.)

        NOTE: Only one of rank or condition may be set.
        g      ð?i   s   size must be a length 2 tuple.RI   RH   s    order must be one of 'F' or 'C'.s*   dtype must be a numpy floating point type.s/   Only one of rank or condition can be specified.i   s   Condition number must be >=1.i    s+   Negative dimensions given for matrix shape.s   Rank must be greater than zero.s   Rank must an integer.s"   Rank given greater than full rank.s8   Condition number was specified for a vector (always 1.).NiÿÿÿÿR"   RG   (   RI   RH   (   R0   Ra   R   Rm   Rl   RŠ   R‰   Rs   t   randomt   seedt   mint
   isinstanceR   t   maxR$   R%   RŽ   Rž   t   linspacet   zerost   nonzerot   eyeR   Rt   t   array(   R   RJ   R"   RG   t   rankt	   conditiont   d_condR&   R!   t   minmnt   rvt   maxmnt   QRX   t   Ut   _t   Vt   svt   St   idx(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   specific_sample_matrix¼  sX    $		!"/ !c         G  sL   t  d k  rH x9 | D]. } t | t j ƒ r d | j k rA t Sq q Wn  t S(   s  
        returns True if an input argument has a dimension that is zero
        and Numpy version is < 1.13, else False. This is due to behaviour
        changes in handling dimension zero arrays:
        https://github.com/numpy/numpy/issues/10573
        i   i   i    (   i   i   (   t   numpy_versionRÄ   R   t   ndarrayRT   R,   R   (   R   RC   t   x(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   shape_with_0_input  s    c         C  s?   |  j  | ƒ  } | | Œ  Wd  QX|  j | t | j ƒ ƒ d  S(   N(   R`   R3   R4   Rb   (   R   RB   RC   Re   t   errRd   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_error  s    c         C  s&   d } |  j  | | | t j j ƒ d  S(   Ns.   Last 2 dimensions of the array must be square.(   RÞ   R   RŽ   t   LinAlgError(   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_non_square#  s    c         C  s'   d | } |  j  | | | t j ƒ d  S(   Ns9   np.linalg.%s() only supported on float and complex arrays(   RÞ   R   Rg   (   R   t   nameRB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_wrong_dtype'  s    
c         C  s?   | r d n d } d | | f } |  j  | | | t j ƒ d  S(   Ns	   np.linalgR   s$   %s.%s() only supported on 2-D arrays(   RÞ   R   Rg   (   R   Rá   RB   RC   t	   la_prefixt   prefixRe   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_wrong_dimensions+  s    c         C  s&   d } |  j  | | | t j j ƒ d  S(   Ns$   Array must not contain infs or NaNs.(   RÞ   R   RŽ   Rß   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_no_nan_or_inf0  s    c         C  sË   t  | t ƒ r3 xµ | D] } |  j | | ƒ q Wn” t  | t ƒ sÇ | j j } | j j } d } |  j | | B| ƒ d } | d k r™ |  j | | ƒ qÇ | d k r¸ |  j | | ƒ qÇ t d ƒ ‚ n  d S(   s6  
        This checks that in a computed result from numba (array, possibly tuple
        of arrays) all the arrays are contiguous in memory and that they are
        all at least one of "C_CONTIGUOUS" or "F_CONTIGUOUS". The computed
        result of the contiguousness is then compared against a hardcoded
        expected result.

        got: is the computed results from numba
        expected_contig: is "C" or "F" and is the expected type of
                        contiguousness across all input values
                        (and therefore tests).
        s6   Results are not at least one of all C or F contiguous.s0   Computed contiguousness does not match expected.RH   RI   s   Unknown contigN(	   RÄ   t   tuplet   assert_contig_sanityR   RP   RS   t   f_contiguoust
   assertTrueRa   (   R   RE   t   expected_contigR   t   c_contigt   f_contigRe   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRè   4  s    c         C  s)   d } |  j  | | | d t j j ƒd  S(   Ns(   Matrix is singular to machine precision.RÝ   (   RÞ   R   RŽ   Rß   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_raise_on_singularY  s    c         C  s¥   |  j  | j d | j d ƒ t j | j d d | j ƒ} d t j | j ƒ j } | d k ro d | } n  | d k rˆ d | } n  t j j	 | | | | ƒ d S(   sE   
        Checks if a matrix is equal to the identity matrix.
        iÿÿÿÿiþÿÿÿR"   i   i
   id   N(
   R6   RT   R   RÉ   R"   t   finfot
   resolutionRs   t   testingt   assert_allclose(   R   RE   t   rtolt   atolRÉ   Rð   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_is_identity_matrix]  s    c         C  s    d } |  j  | | | t ƒ d S(   s5   
        For use in norm() and cond() tests.
        s    Invalid norm order for matrices.N(   RÞ   Ra   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_invalid_norm_kindm  s    c         C  s&   d } |  j  | | | t j j ƒ d  S(   Ns   Arrays cannot be empty(   RÞ   R   RŽ   Rß   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_raise_on_emptyt  s    N(   R†   R‡   Rˆ   R   Rl   Rm   R‰   RŠ   Rk   R   R$   Rs   RØ   RÜ   Ra   RÞ   Rà   Râ   R,   Rå   Ræ   Rè   Rî   Rõ   Rö   R÷   (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRÀ   §  s    		
S					%		t   TestTestLinalgBasec           B  s   e  Z d  Z d „  Z RS(   s†   
    The sample matrix code TestLinalgBase.specific_sample_matrix()
    is a bit involved, this class tests it works as intended.
    c      	     sÆ  t  d ƒ ‰  d# d$ d% d& d' g } x¿t | ˆ  j d ƒ D]¨\ } } } | \ } } t | | ƒ } ˆ  j | | | ƒ } ˆ j | j | ƒ ˆ j t j j	 | ƒ | ƒ | d k r| d }	 ˆ  j | | | d |	 ƒ} ˆ j | j | ƒ ˆ j t j j	 | ƒ |	 ƒ n  d t j
 | ƒ j }
 ˆ  j | | | ƒ } ˆ j | j | ƒ t j j t j j | ƒ d	 d
 |
 d |
 ƒ| d k r7 d } ˆ  j | | | d | ƒ} ˆ j | j | ƒ t j j t j j | ƒ d d
 |
 d |
 ƒq7 q7 Wt ‡  ‡ f d † } ˆ j t ƒ , } d } | d( t j d f | d t ƒWd  QXd } | d) t j d f | d t ƒd } | d* t j d f | d t ƒd } | d+ t j d f | d t ƒd } | d, t j d d d f | d t ƒd } | d- t j d d  d f | d t ƒd } | d. t j d f | d t ƒd } | d/ t j d d f | d t ƒd } | d0 t j d d f | d t ƒd } | d1 t j d d  d  f | d t ƒd! } | d2 t j d d" f | d t ƒd  S(3   NRØ   i   i   i   i   i   t   FCRË   g      ð?Ró   Rô   g      $@RÌ   c           sB   ˆ j  | ƒ  } ˆ  j |  Œ  Wd  QXˆ j | t | j ƒ ƒ d  S(   N(   R`   RØ   R3   R4   Rb   (   RC   Re   RÝ   Rd   (   t   instR   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_error®  s    t   blanki   RI   RÝ   s   size must be a length 2 tuple.s    order must be one of 'F' or 'C'.t   zs*   dtype must be a numpy floating point type.s/   Only one of rank or condition can be specified.s   Condition number must be >=1.iÿÿÿÿs+   Negative dimensions given for matrix shape.iýÿÿÿs   Rank must be greater than zero.s"   Rank given greater than full rank.i   s8   Condition number was specified for a vector (always 1.).i
   s   Rank must an integer.g      ø?(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   iýÿÿÿ(   i   i   (   i   i   (   i   i   (   i   i   (   RÀ   R   Rk   RÃ   RØ   R6   RT   R   RŽ   R³   Rï   Rð   Rñ   Rò   R°   Ra   R`   RU   Rl   t   int32Rs   (   R   t   sizesRJ   R"   RG   R&   R!   RÎ   R¡   RË   Rð   RÌ   Rû   Rd   Re   (    (   Rú   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_specific_sample_matrix  sj    %
%%%""%(   R†   R‡   Rˆ   R   (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRø   y  s   t   TestLinalgInvc           B  s)   e  Z d  Z e d ƒ e d „  ƒ ƒ Z RS(   s"   
    Tests for np.linalg.inv.
    R   c           s  d } t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } xE t ˆ j d ƒ D]1 \ } } ˆ j | | f | | ƒ } | | ƒ q@ W| t j d ƒ ƒ ˆ j ˆ  t j	 d ƒ f ƒ ˆ j
 d ˆ  t j	 d d	 t j ƒf ƒ ˆ j d ˆ  t j	 d ƒ f ƒ ˆ j ˆ  t j d ƒ f ƒ d
 S(   s$   
        Test np.linalg.inv
        i
   Rj   c           s®   t  |  ƒ } ˆ  |  ƒ } ˆ j | d ƒ t } y t j j | | d d ƒWn t k
 rd t } n X| r t j | |  ƒ } ˆ j	 | ƒ n  ˆ j
 ƒ   ˆ  |  ƒ Wd  QXd  S(   NRI   t   nulpi
   (   R   Rè   R   R   Rñ   t   assert_array_almost_equal_nulpRU   R,   R   Rõ   R@   (   R   t   kwargsRD   RE   t   use_reconstructiont   rec(   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   checkñ  s    
Rq   i    i   i   R   R"   N(   i    i    (   i   i   (   i   i   (   i   i   (   R   R,   R   R   Rk   RØ   R   RL   Rà   t   onesRâ   Rþ   Rå   Rî   RÇ   (   R   R!   R  R"   RG   R   (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_invè  s    (   R†   R‡   Rˆ   R   t   needs_lapackR	  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ã  s   	t   TestLinalgCholeskyc           B  s/   e  Z d  Z d „  Z d „  Z e d „  ƒ Z RS(   s'   
    Tests for np.linalg.cholesky.
    c   	      C  sœ   t  j j d ƒ t  j j | | ƒ } t  j j | ƒ \ } } t  j d | d ƒ } t  j t  j | j t  j	 | ƒ ƒ | ƒ } t  j
 | d | d | ƒ} | S(   Ni    i   R"   RG   (   R   RÁ   RÂ   t   randRŽ   Rž   R   R   Rt   t   diagRÊ   (	   R   R&   R"   RG   R¡   t   qRÓ   t   LRÑ   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR'   "  s    *c         C  s&   d } |  j  | | | t j j ƒ d  S(   Ns    Matrix is not positive definite.(   RÞ   R   RŽ   Rß   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_not_pd.  s    c           s2  d } t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } x? t ˆ j d ƒ D]+ \ } } ˆ j | | | ƒ } | | ƒ q@ W| t j d ƒ ƒ d } ˆ j ˆ  t j	 d d	 t j
 ƒf ƒ ˆ j | ˆ  t j	 d d	 t j ƒf ƒ ˆ j | ˆ  t j	 d d	 t j
 ƒf ƒ ˆ j ˆ  t j	 d
 d	 t j
 ƒj d d ƒ f ƒ d S(   s)   
        Test np.linalg.cholesky
        i
   Rj   c           s  ˆ j  |  ƒ r ˆ  |  ƒ d  St |  ƒ } ˆ  |  ƒ } t } ˆ j | d ƒ y t j j | | d d ƒWn t k
 r t } n X| rá t j	 | t j
 | j ƒ ƒ } d t j |  j ƒ j } t j j |  | d | d | ƒn  ˆ j ƒ   ˆ  |  ƒ Wd  QXd  S(   NRH   R  i
   i   Ró   Rô   (   RÜ   R’   R   Rè   R   Rñ   R  RU   R,   R   t   conjRt   Rï   R"   Rð   Rò   R@   (   R   RD   RE   R  R  Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  :  s,    

	
Rù   i    R‘   i   i   R"   i   N(   i    i    (   i   i   (   i   i   (   R   R,   R’   R   Rk   R'   R   RL   Rà   R  Rl   Râ   Rþ   Rå   R  R%   (   R   R!   R  R"   RG   R   t   rn(    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_cholesky2  s    #%	(   R†   R‡   Rˆ   R'   R  R
  R  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR    s   		t   TestLinalgEigenSystemsc           B  sh   e  Z d  Z d „  Z d „  Z d d „ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z RS(	   s*   
    Tests for np.linalg.eig/eigvals.
    c         C  s´   |  j  | | ƒ } t j | ƒ } t j t j | j d | j d d ƒ ƒ } | d | | <t j t j | j d | j d d ƒ ƒ } | d  | | <t j | d | d | ƒ} | S(   Ni    i   iÿÿÿÿR"   RG   (   R$   R   R  RÈ   RÉ   RT   RÊ   (   R   R&   R"   RG   t   vRÑ   R×   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR'   z  s    ,,c         C  s!   | d } |  j  | | | ƒ d  S(   Ns+   () argument must not cause a domain change.(   RÞ   (   R   Rá   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_no_domain_change…  s    
c           s  d } t  d t ƒ ˆ ƒ ‰  ‡  ‡ ‡ ‡ ‡ f d †  } x? t ˆ j d ƒ D]+ \ } } ˆ j | | | ƒ }	 | |	 ƒ qI WxÜ t j t j g D]È }
 | t j d d |
 ƒƒ ˆ j	 ˆ  t j
 d d |
 ƒf ƒ ˆ j ˆ ˆ  t j
 d d t j ƒf ƒ ˆ j ˆ ˆ  t j
 d d |
 ƒf ƒ ˆ j ˆ  t j d	 d
 g t j t j g g d |
 ƒf ƒ q‹ W| rþt j d d g d d g g ƒ } | | j t j ƒ ƒ ˆ | ƒ \ } } ˆ j t j | j ƒ ƒ x< t j t j g D]% }
 ˆ j ˆ ˆ  | j |
 ƒ f ƒ qÒWn  d S(   s$   
        Test np.linalg.eig
        i
   Rj   c           sÔ  ˆ j  |  ƒ r ˆ  |  ƒ d  Sˆ |  ƒ } ˆ  |  ƒ } ˆ j t | ƒ t | ƒ ƒ t } t | t ƒ r… t } ˆ j t | ƒ ˆ ƒ n ˆ j | j ˆ ƒ ˆ j | d ƒ t } xY t	 t | ƒ ƒ D]E } y% t
 j j | | | | d d ƒWqÁ t k
 rt } qÁ XqÁ Wd t
 j |  j ƒ j } | r³| r| \ } } ˆ d d k rót
 j t
 j |  j d |  j d d ƒ ƒ }	 t
 j t
 j |  j d |  j d d ƒ ƒ }
 ˆ  |  ƒ t
 j |  |	 ƒ |  |
 <t
 j t
 j |  ƒ ƒ |  t
 j |  j d ƒ <n  t
 j |  | ƒ } t
 j | t
 j | ƒ ƒ } t
 j j | j | j d	 | d
 | ƒt
 j | ƒ r°t
 j j | j | j d	 | d
 | ƒq°q³t
 j j t
 j | ƒ t
 j | ƒ d	 | d
 | ƒn  ˆ j ƒ   ˆ  |  ƒ Wd  QXd  S(   NRI   R  i
   i   iÿÿÿÿt   hi    i   Ró   Rô   (   RÜ   R6   R0   R   RÄ   Rç   R,   t   ndimRè   RN   R   Rñ   R  RU   Rï   R"   Rð   RÈ   RÉ   RT   R  t   realR  t   diag_indicesR   Rò   t   iscomplexobjt   imagt   sortR@   (   R   RD   RE   t   res_is_tupleR  R{   Rð   R=   R  t   idxlt   idxut   lhst   rhs(   RB   t   expected_res_lent   funcRá   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ‘  sb    
	,,
/					
Rù   i    R"   i   i   g      ð?g       @i   iþÿÿÿN(   i    i    (   i   i   (   i   i   (   R   R,   R   Rk   R'   R   Rm   RŠ   RL   Rà   R  Râ   Rþ   Rå   Ræ   RÊ   t   inft   nanR    R‰   Rê   t   anyR  Rl   R  (   R   Rá   R$  R#  t   check_for_domain_changeR!   R  R"   RG   R   t   tyR¡   t   lRÓ   (    (   RB   R#  R$  Rá   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   checker_for_linalg_eig‰  s,    b"%	$!c         C  s   |  j  d t d t ƒ d  S(   NR“   i   (   R+  R”   R,   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_eig%  s    c         C  s   |  j  d t d t ƒ d  S(   NR•   i   (   R+  R–   R,   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_eigvals)  s    c         C  s   |  j  d t d t ƒ d  S(   NR—   i   (   R+  R˜   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_eigh-  s    c         C  s   |  j  d t d t ƒ d  S(   NR™   i   (   R+  Rš   R   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_eigvalsh1  s    N(   R†   R‡   Rˆ   R'   R  Rs   R+  R
  R,  R-  R.  R/  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  u  s   		›t   TestLinalgSvdc           B  s   e  Z d  Z e d „  ƒ Z RS(   s"   
    Tests for np.linalg.svd.
    c           sr  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d d d g } t t f } xQ t | ˆ j | d ƒ D]7 \ } } } } ˆ j | | | ƒ } | | d | ƒqa Wd	 }	 ˆ j |	 ˆ  t j	 d d t j
 ƒf ƒ ˆ j |	 ˆ  t j	 d d t j ƒf ƒ ˆ j ˆ  t j d d g t j t j g g d t j ƒf ƒ x< d d d g D]+ }
 t j |
 ƒ t f } ˆ j ˆ  | ƒ q?Wd S(   s$   
        Test np.linalg.svd
        Rj   c           sÆ  t  |  |  } ˆ  |  |  } ˆ j t | ƒ t | ƒ ƒ ˆ j t | ƒ d ƒ ˆ j | d ƒ t } xY t t | ƒ ƒ D]E } y% t j j | | | | d d ƒWqy t	 k
 r½ t
 } qy Xqy W| r¢| \ } } } x8 t t | ƒ ƒ D]$ } ˆ j | | j | | j ƒ qê Wt j | j d | j d f ƒ }	 t j |	 | ƒ t j t j | |	 ƒ | ƒ }
 t j |  j ƒ j } t j j |  |
 d d | d d	 | ƒn  ˆ j ƒ   ˆ  |  |  Wd  QXd  S(
   Ni   RI   R  i
   i   i    Ró   Rô   id   (   R   R6   R0   Rè   R   RN   R   Rñ   R  RU   R,   RT   RÇ   t   fill_diagonalR   Rï   R"   Rð   Rò   R@   (   R   R  RD   RE   R  R{   t   uRÕ   t   vtt   sR  Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  B  s6    	
"#	
i   i   i   i   Rù   Rœ   R›   i   R"   i
   g      ð?g       @i    N(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i    (   i    i    (   R   R,   R   R   R   Rk   RØ   Râ   R   R  Rþ   Rå   Rl   Ræ   RÊ   R%  R&  RL   R÷   (   R   R  Rÿ   Rœ   RJ   R"   t   fmatRG   R   R  t   szRC   (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_svd;  s&    8(	$(   R†   R‡   Rˆ   R
  R7  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR0  6  s   t   TestLinalgQrc           B  s   e  Z d  Z e d „  ƒ Z RS(   s!   
    Tests for np.linalg.qr.
    c   	        sQ  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d d d g } xE t | ˆ j d ƒ D]. \ } } } ˆ j | | | ƒ } | | ƒ qR Wd	 } ˆ j | ˆ  t j d d t j	 ƒf ƒ ˆ j
 | ˆ  t j d d t j ƒf ƒ ˆ j ˆ  t j d d g t j t j g g d t j ƒf ƒ x3 d d d g D]" } ˆ j ˆ  t j | ƒ f ƒ q'Wd S(   s#   
        Test np.linalg.qr
        Rj   c   
        s©  t  |  |  } ˆ  |  |  } ˆ j t | ƒ t | ƒ ƒ ˆ j t | ƒ d ƒ ˆ j | d ƒ t } xY t t | ƒ ƒ D]E } y% t j j | | | | d d ƒWqy t	 k
 r½ t
 } qy Xqy W| r…| \ } } x8 t t | ƒ ƒ D]$ } ˆ j | | j | | j ƒ qç Wt j | | ƒ } t j |  j ƒ j }	 t j j |  | d d |	 d d |	 ƒˆ j t j t j | j ƒ | ƒ ƒ n  ˆ j ƒ   ˆ  |  |  Wd  QXd  S(   Ni   RI   R  i
   Ró   Rô   id   (   RŸ   R6   R0   Rè   R   RN   R   Rñ   R  RU   R,   RT   R   Rï   R"   Rð   Rò   Rõ   t	   conjugateRt   R@   (
   R   R  RD   RE   R  R{   R  t   rR  Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ¦  s4    	
"	
(i   i   i   i   i   Rù   Rž   i   R"   i
   g      ð?g       @i    N(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i    (   i    i    (   R   R,   RŸ   R   Rk   RØ   Râ   R   R  Rþ   Rå   Rl   Ræ   RÊ   R%  R&  R÷   RL   (	   R   R  Rÿ   RJ   R"   RG   R   R  R6  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_qrŸ  s"    7"	$(   R†   R‡   Rˆ   R
  R;  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR8  š  s   t   TestLinalgSystemsc           B  s,   e  Z d  Z e d „ Z d „  Z d „  Z RS(   su   
    Base class for testing "system" solvers from np.linalg.
    Namely np.linalg.solve() and np.linalg.lstsq().
    c         C  s?   | r d n d } d | | f } |  j  | | | t j ƒ d  S(   Ns	   np.linalgR   s*   %s.%s() only supported on 1 and 2-D arrays(   RÞ   R   Rg   (   R   Rá   RB   RC   Rã   Rä   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_wrong_dimensions_1D   s    c         C  s&   d } |  j  | | | t j j ƒ d  S(   Ns<   Incompatible array sizes, system is not dimensionally valid.(   RÞ   R   RŽ   Rß   (   R   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_dimensionally_invalid  s    c         C  s'   d | } |  j  | | | t j ƒ d  S(   NsA   np.linalg.%s() only supports inputs that have homogeneous dtypes.(   RÞ   R   Rg   (   R   Rá   RB   RC   Re   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_homogeneous_dtypes  s    
(   R†   R‡   Rˆ   R,   R=  R>  R?  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR<  ù  s   	t   TestLinalgLstsqc           B  s   e  Z d  Z e d „  ƒ Z RS(   s$   
    Tests for np.linalg.lstsq.
    c           sk  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  ‰ d d d d d g } t ˆ j ƒ } d d	 g } t | ƒ ‰ d
 } ‡ ‡ ‡ f d †  } xò | D]ê } t | ƒ } t ˆ ƒ } ˆ j | | | ƒ }	 | |	 | ƒ | \ }
 } t |
 | ƒ } |
 d k r… | d k r… | d } ˆ j | | | d | ƒ}	 | |	 | ƒ ˆ j | | | d | ƒ}	 d | } | | } | |	 | d | ƒq… q… Wd  d! g d" d# g d$ d% g d& d' g g } xB | D]: \ }	 } t j	 |	 ƒ t j	 | ƒ f } ˆ j
 ˆ  | ƒ q¤Wt j d d g d d g g d t j ƒ} ˆ  | | f f d } t j d d g d d g g d t j ƒ} ˆ j | ˆ  | | f ƒ ˆ j | ˆ  | | f ƒ t j d d g d d g g d t j ƒ} ˆ j | ˆ  | | f ƒ ˆ j | ˆ  | | f ƒ t j d d g d t j ƒ} ˆ j | ˆ  | | f ƒ t j d d g t j t j g g d t j ƒ} ˆ j ˆ  | | f ƒ ˆ j ˆ  | | f ƒ t j d d g d t j ƒ} ˆ  | | f f t j d d g d d g g d d g d d g g g d t j ƒ} ˆ j | ˆ  | | f ƒ t j d g d t j ƒ} t j d g d g d g g d t j ƒ} ˆ j ˆ  | | f ƒ ˆ j ˆ  | | f ƒ d S((   s&   
        Test np.linalg.lstsq
        Rj   c      	     s-  t  |  | |  } ˆ  |  | |  } ˆ j t | ƒ t | ƒ ƒ ˆ j t | ƒ d ƒ ˆ j | d ƒ t } yx ˆ j | d | d ƒ xY t t | ƒ ƒ D]E } y% t j j | | | | d d ƒWqš t	 k
 rÞ t
 } qš Xqš WWn t	 k
 rý t
 } n X| r| \ } } }	 }
 d d d g } y` ˆ j |	 | d ƒ xE | D]= } t | | t j ƒ rCˆ j | | j | | j ƒ qCqCWWn2 t	 k
 r¹ˆ j t |	 | d ƒ d k  ƒ n Xt j |  j ƒ j } y= t j |  | ƒ } t j j | | d	 d | d
 d | ƒWqt	 k
 rxä | D]Ø } y3 t j j | | | | d	 d | d
 d | ƒWn; t	 k
 r™t j j |  ƒ } ˆ j d | d | ƒ n Xt j j | t j |  | d ƒ ƒ } t j j | t j |  | ƒ ƒ } t j j | | d	 d ƒq#WqXn  ˆ j ƒ   ˆ  |  | |  Wd  QXd  S(   Ni   RH   i   R  i
   i    i   i   Ró   Rô   id   g      ð?g      $@(   R¤   R6   R0   Rè   R   RN   R   Rñ   R  RU   R,   RÄ   RÚ   RT   Rê   t   absRï   R"   Rð   R   Rò   RŽ   R°   t   assertGreaterR­   R@   (   R¡   R¢   R  RD   RE   R  R{   RÛ   t   resRË   R4  t   out_array_idxRð   R  t   ct   res_expectedt   res_got(   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  %  sh    	
)%	
	

	"	i   i   i   i   i   RI   RH   g      $@c           s—   d } xŠ | D]‚ } t  ˆ ƒ } ˆ j |  j d | f | | ƒ } ˆ  |  | |  t  ˆ ƒ } | d  d  … d f j d | ƒ } ˆ  |  | |  q Wd  S(   Ni   i   i    RG   (   i   i   (   t   nextRØ   RT   R]   (   R¡   t   dtR  t   b_sizest   b_sizet   b_orderR¢   RX   (   R  t   cycle_orderR   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   inner_test_loop_fn”  s    "RË   RÌ   g      ð?R£   i    g       @g      @g      @R"   R    i   i   i   i   N(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   (   i   i    (   i   (   i   i   (   i    (   i   i   (   i   i    (   R   R,   R¤   R   Rk   RH  RØ   RÃ   R   RL   R÷   RÊ   Rl   Rþ   Râ   Rm   R?  Rå   R%  R&  Ræ   R=  R>  (   R   Rÿ   t   cycle_dtt   orderst   specific_condRN  t   a_sizeRI  t   a_orderR¡   R&   R!   RÎ   R:  R£   t   approx_half_rank_rcondt   emptiesR   RC   t   okR  t   badt   oneDt   bad1Dt   bad2D(    (   RB   R  RM  R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_lstsq  sn    \


			***0B*(   R†   R‡   Rˆ   R
  R[  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR@    s   t   TestLinalgSolvec           B  s   e  Z d  Z e d „  ƒ Z RS(   s$   
    Tests for np.linalg.solve.
    c           sÎ  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d g } x¿ t | ˆ j d ƒ D]¨ \ } } } ˆ j | | | ƒ } d } x{ t | d ƒ D]j \ } }	 ˆ j | j d | f | |	 ƒ }
 | | |
 ƒ |
 d	 d	 … d f j d
 |	 ƒ } | | | ƒ q† WqL Wˆ  t j	 d ƒ t j	 d ƒ ƒ t j
 d d g d d g g d t j ƒ} ˆ  | | ƒ d } t j
 d d g d d g g d t j ƒ} ˆ j | ˆ  | | f ƒ ˆ j | ˆ  | | f ƒ t j
 d d g d d g g d t j ƒ} ˆ j | ˆ  | | f ƒ ˆ j | ˆ  | | f ƒ t j
 d d g d t j ƒ} ˆ j | ˆ  | | f ƒ t j
 d d g t j t j g g d t j ƒ} ˆ j ˆ  | | f ƒ ˆ j ˆ  | | f ƒ t j
 d d g d t j ƒ} ˆ  | | ƒ t j
 d d g d d g g d d g d d g g g d t j ƒ} ˆ j | ˆ  | | f ƒ t j
 d g d t j ƒ} t j
 d g d g d g g d t j ƒ} ˆ j ˆ  | | f ƒ ˆ j ˆ  | | f ƒ ˆ j d t j d d d ƒ} ˆ j ˆ  | | f ƒ d	 S(   s&   
        Test np.linalg.solve
        Rj   c           s  t  |  | |  } ˆ  |  | |  } ˆ j | d ƒ t } y t j j | | d d ƒWn t k
 rp t } n X| rÞ ˆ j | j	 | j	 ƒ t j
 |  | ƒ } t j |  j ƒ j } t j j | | d d | d d | ƒn  ˆ j ƒ   ˆ  |  | |  Wd  QXd  S(   NRI   R  i
   Ró   Rô   id   (   R¦   Rè   R   R   Rñ   R  RU   R,   R6   RT   R   Rï   R"   Rð   Rò   R@   (   R   R   R  RD   RE   R  R  Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR    s(    	

	
i   i   i   Rù   i   i    NRG   g      ð?g        R"   R¥   i   i   g       @i   i   i   g      @RH   RË   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i    (   i    (   i   i   (   R   R,   R¦   R   Rk   RØ   RT   R]   R   RL   RÊ   Rl   Rþ   Râ   Rm   R?  Rå   R%  R&  Ræ   R=  R>  Rî   (   R   R  Rÿ   RJ   R"   RG   R¡   RJ  RK  RL  R¢   RX   RV  R  RW  t   ok_oneDRY  RZ  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_solve  sL    +""***0B*(   R†   R‡   Rˆ   R
  R^  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR\    s   t   TestLinalgPinvc           B  s   e  Z d  Z e d „  ƒ Z RS(   s#   
    Tests for np.linalg.pinv.
    c           sÀ  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d d d g } d } xº t | ˆ j d	 ƒ D]£ \ } } } ˆ j | | | ƒ } | | ƒ | \ } }	 | d k rX |	 d k rX t | |	 ƒ }
 ˆ j | | | d
 | ƒ} d | } |
 | } | | d | ƒqX qX Wx' d d g D] } | t j | ƒ ƒ qWd } ˆ j	 | ˆ  t j
 d d t j ƒf ƒ ˆ j | ˆ  t j
 d d t j ƒf ƒ ˆ j ˆ  t j d d g t j t j g g d t j ƒf ƒ d S(   s%   
        Test np.linalg.pinv
        Rj   c   	        sü  ˆ j  |  ƒ r  ˆ  |  |  d  St |  |  } ˆ  |  |  } ˆ j | d ƒ t } y t j j | | d d ƒWn t k
 rŠ t } n X| rØˆ j	 | j
 | j
 ƒ t j | |  ƒ } y ˆ j | ƒ WqØt k
 rÔd t j |  j ƒ j } ˆ  | ƒ } t j j | |  d d | d d | ƒ|  j
 d |  j
 d	 k r±t d
 t ƒ t ƒ } | |  t j |  j
 d ƒ j |  j ƒ |  d } t j j | | d d | d d | ƒn  ˆ j t j j | | ƒ | ƒ qØXn  ˆ j ƒ   ˆ  |  |  Wd  QXd  S(   NRI   R  i
   i   Ró   Rô   id   i    i   Rj   (   RÜ   R¨   Rè   R   R   Rñ   R  RU   R,   R6   RT   R   Rõ   Rï   R"   Rð   Rò   R   R¤   RÉ   R    t
   assertLessRŽ   R­   R@   (	   R   R  RD   RE   R  R  Rð   R    t
   lstsq_pinv(   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ‰  sN    	
	
		
'i   i   i   i   i   g      $@Rù   RÌ   g      ð?R£   i    R§   i   R"   i
   g       @N(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i    (   i   i   (   R   R,   R¨   R   Rk   RØ   RÃ   R   RL   Râ   R  Rþ   Rå   Rl   Ræ   RÊ   R%  R&  (   R   R  Rÿ   RQ  RJ   R"   RG   R   R&   R!   RÎ   R£   RT  R6  R  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_pinv‚  s4    I"
	

	$(   R†   R‡   Rˆ   R
  Rb  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR_  }  s   t   TestLinalgDetAndSlogdetc           B  sG   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   sÄ   
    Tests for np.linalg.det. and np.linalg.slogdet.
    Exactly the same inputs are used for both tests as
    det() is a trivial function of slogdet(), the tests
    are therefore combined.
    c         K  s”   |  j  | ƒ r  | | |  d  St | |  } | | |  } d t j | j ƒ j } t j j | | d | ƒ|  j ƒ   | | |  Wd  QXd  S(   Ni   Ró   (	   RÜ   R¬   R   Rï   R"   Rð   Rñ   Rò   R@   (   R   RB   R   R  RD   RE   Rð   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt	   check_det  s    c   	      K  sH  |  j  | ƒ r  | | |  d  St | |  } | | |  } |  j t | ƒ t | ƒ ƒ |  j t | ƒ d ƒ x> t d ƒ D]0 } |  j t j | | ƒ t j | | ƒ ƒ q} W| j j | d ƒ } t j	 j
 | | d d d ƒd t j | j ƒ j } t j	 j | d | d d | d | ƒ|  j ƒ   | | |  Wd  QXd  S(	   Ni   i    R  i
   i   i   Ró   Rô   (   RÜ   Rª   R6   R0   RN   R   R  R"   t   typeRñ   R  Rï   Rð   Rò   R@   (	   R   RB   R   R  RD   RE   R{   t   got_convRð   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   check_slogdet  s&    		c   	      C  sF  d d d g } xH t  | |  j d ƒ D]1 \ } } } |  j | | | ƒ } | | | ƒ q% WxB t  |  j d ƒ D]. \ } } t j d d | ƒ} | | | ƒ qm W| | t j d ƒ ƒ |  j | | t j d d t j ƒf ƒ |  j	 | | t j d	 d t j
 ƒf ƒ |  j | t j d
 d g t j t j g g d t j
 ƒf ƒ d  S(   Ni   i   i   Rù   i   R"   i    i   i
   g      ð?g       @(   i   i   (   i   i   (   i   i   (   i   i   (   i    i    (   i   i   (   R   Rk   RØ   R   RÇ   RL   Râ   R  Rþ   Rå   Rl   Ræ   RÊ   R%  R&  (	   R   R  R  RB   Rÿ   RJ   R"   RG   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   do_test>  s     "	$c         C  s/   t  d t ƒ t ƒ } |  j d |  j | ƒ d  S(   NRj   R«   (   R   R,   R¬   Rh  Rd  (   R   RB   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_det_  s    c         C  s/   t  d t ƒ t ƒ } |  j d |  j | ƒ d  S(   NRj   R©   (   R   R,   Rª   Rh  Rg  (   R   RB   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_slogdetd  s    (	   R†   R‡   Rˆ   Rd  Rg  Rh  R
  Ri  Rj  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRc  ü  s   		(	!t   TestLinalgNormc           B  s   e  Z d  Z e d „  ƒ Z RS(   s#   
    Tests for np.linalg.norm.
    c   
        s¤  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d g } d t j t j d d d d d	 d
 d d g } xH t | ˆ j | ƒ D]1 \ } } } ˆ j | | ƒ } | | d | ƒqz WxO t ˆ j | ƒ D]; \ } } ˆ j d | ƒ d d d … } | | d | ƒqÂ Wd d  d! d" d# g } d t j t j d d d d	 g } xQ t | ˆ j d | ƒ D]7 \ } } } } ˆ j	 | | | ƒ } | | d | ƒqQWd g } x˜ t ˆ j | d ƒ D] \ } } } ˆ j	 d$ | | ƒ } | | d  d | ƒ| | d d … d d … f d | ƒ| | d d d d … f d | ƒq«WxŽ t ˆ j | d ƒ D]w \ } } } t j
 d% d | d | ƒ} ˆ j ˆ  | | ƒ d ƒ t j
 d& d | d | ƒ} ˆ j ˆ  | | ƒ d ƒ qFWd }	 ˆ j |	 ˆ  t j d' d t j ƒf ƒ ˆ j |	 ˆ  t j d d t j ƒj d d d ƒ f ƒ ˆ j ˆ  t j d d g t j t j g g d t j ƒd f ƒ ˆ j ˆ  t j d d g d d g g d t j ƒd f ƒ d S((   s%   
        Test np.linalg.norm
        Rj   c           s‹   t  |  |  } ˆ  |  |  } ˆ j t j | ƒ ƒ d t j |  j ƒ j } t j j | | d | ƒˆ j	 ƒ   ˆ  |  |  Wd  QXd  S(   Ni   Ró   (
   R¯   Rê   R   R  Rï   R"   Rð   Rñ   Rò   R@   (   R   R  RD   RE   Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  y  s    i   i   i   i    iÿÿÿÿi   iþÿÿÿi   gÍÌÌÌÌÌ@g333333ÀR®   i
   Ni   i   Rù   i   i   R"   RG   g        R­   i   g      ð?g       @g      @g      @i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    (   i    i    (   i   i   (   R   R,   R¯   Rs   R   R%  R   Rk   R$   RØ   RL   R6   Râ   R  Rþ   R=  Rl   R%   Ræ   RÊ   R&  Rö   (
   R   R  Rÿ   t	   nrm_typesRJ   R"   t   nrm_typeR   RG   R  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_normr  sV    .""(	"&'"	$'(   R†   R‡   Rˆ   R
  Rn  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRk  m  s   t   TestLinalgCondc           B  s   e  Z d  Z e d „  ƒ Z RS(   s#   
    Tests for np.linalg.cond.
    c      	     s#  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d t j t j d d d d g } d d g } xQ t | ˆ j d	 | ƒ D]7 \ } } } } ˆ j | | | ƒ } | | d
 | ƒqn Wd  d! d" d# g } xE t | ˆ j d	 ƒ D]. \ } } } ˆ j | | | ƒ } | | ƒ qÑ Wx3 d$ d% d& g D]" }	 ˆ j	 ˆ  t j
 |	 ƒ f ƒ qWt d' k rÆt j d d g d d g g d t j ƒ}
 | |
 ƒ | |
 d
 d ƒt j d d g d d g g d t j ƒ}
 | |
 d
 d ƒn  t j ƒ  ~ t j d d g d d g g d t j ƒ} t d( k  r2t j d t ƒ ˆ j t d | | ƒ n  t j d t ƒ | | ƒ Wd QXd } ˆ j | ˆ  t j d) d t j ƒf ƒ ˆ j | ˆ  t j d d t j ƒf ƒ ˆ j ˆ  t j d d g t j t j g g d t j ƒf ƒ ˆ j ˆ  t j d d g d d g g d t j ƒd f ƒ d S(*   s%   
        Test np.linalg.cond
        Rj   c           s‹   t  |  |  } ˆ  |  |  } ˆ j t j | ƒ ƒ d t j |  j ƒ j } t j j | | d | ƒˆ j	 ƒ   ˆ  |  |  Wd  QXd  S(   Ni   Ró   (
   R²   Rê   R   R  Rï   R"   Rð   Rñ   Rò   R@   (   R   R  RD   RE   Rð   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ã  s    i   iÿÿÿÿi   iþÿÿÿi   i   Rù   R±   i   i   i    i   R"   g Èë…óÌágš™™™™™¹?i   t   errors   overflow encountered in.*t   ignoreNR°   i
   g      ð?g       @g      @g      @i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i    (   i    i    (   i   i   (   i   i   (   i   i   (   R   R,   R²   Rs   R   R%  R   Rk   RØ   R÷   RL   RÙ   RÊ   Rl   R*   R+   R-   t   RuntimeWarningt   assertRaisesRegexpRâ   R  Rþ   Rå   Ræ   R&  Rö   (   R   R  t   psRÿ   RJ   R"   RG   R±   R   R6  RÛ   R  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_condÛ  sP    "(" *
**		$'(   R†   R‡   Rˆ   R
  Ru  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRo  Ö  s   t   TestLinalgMatrixRankc           B  s   e  Z d  Z e d „  ƒ Z RS(   s*   
    Tests for np.linalg.matrix_rank.
    c           sã  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d d d g } x;t | ˆ j d ƒ D]$\ } } } ˆ j | | | ƒ } | | ƒ d	 } xbt d t | ƒ d ƒ D]G} ˆ j | | | d
 | ƒ} ˆ j ˆ  | ƒ | ƒ | | ƒ | j	 \ }	 }
 d | d d … d d … f <t
 j t
 j |	 |
 ƒ ƒ } t
 j | ƒ rqd t
 j j | ƒ d d t
 j j | ƒ } d | d <n  d t
 j j | ƒ } d | d <| j | ƒ | | d |  | d |  f <ˆ j ˆ  | | ƒ | d ƒ | | d | ƒq  Wd | d d … d d … f <ˆ j ˆ  | ƒ d ƒ | | ƒ t
 j | ƒ rCd | d  <n
 d | d! <ˆ j ˆ  | | ƒ d ƒ | | d | ƒqR Wxp ˆ j D]e } t
 j d d | ƒ} ˆ j ˆ  | ƒ d ƒ | | ƒ d | d <ˆ j ˆ  | ƒ d ƒ | | ƒ q„WxM d" d# d$ g D]< } x3 d d	 g D]% } ˆ j ˆ  t
 j | ƒ | f ƒ qWqýWd } ˆ j | ˆ  t
 j d% d t
 j ƒf ƒ ˆ j | ˆ  t
 j d d t
 j ƒj d d d ƒ f ƒ ˆ j ˆ  t
 j d d g t
 j t
 j g g d t
 j ƒf ƒ d S(&   s,   
        Test np.linalg.matrix_rank
        Rj   c           sU   t  |  |  } ˆ  |  |  } t j j | | ƒ ˆ j ƒ   ˆ  |  |  Wd  QXd  S(   N(   Rµ   R   Rñ   Rò   R@   (   R   R  RD   RE   (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  @  s
    i   i   i   i   i   Rù   g‚vIhÂ%<=RË   g        Ng      ð?y              ð?g›+¡†›„=y        ›+¡†›„=i    R´   iÿÿÿÿR"   R³   i   i   g       @(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   y›+¡†›„=›+¡†›„=y›+¡†›„=›+¡†›„=(   iÿÿÿÿiÿÿÿÿ(   iÿÿÿÿiÿÿÿÿ(   i    i   (   i   i    (   i    i    (   i   i   (   R   R,   Rµ   R   Rk   RØ   RN   RÃ   R6   RT   R   RÈ   RÉ   R  RÁ   R  R    RÇ   Rs   R÷   RL   Râ   R  Rþ   R=  Rl   R%   Ræ   RÊ   R%  R&  (   R   R  Rÿ   RJ   R"   RG   R   R´   R{   R&   R!   R×   R   RI  R6  R  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_matrix_rank8  sh    "
 

)



'	$(   R†   R‡   Rˆ   R
  Rw  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRv  3  s   t   TestLinalgMatrixPowerc           B  s&   e  Z d  Z d „  Z e d „  ƒ Z RS(   s+   
    Tests for np.linalg.matrix_power.
    c         C  s8   | | d d ƒ |  j  t j ƒ  | | Œ  Wd  QXd  S(   Ni    i   (   R`   R   Rg   (   R   RB   RC   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_int_exponenent£  s    c           sá  t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } d d d g } d d g t t d d	 ƒ ƒ d
 d g } xv t | | ˆ j d ƒ D]\ \ } } } } ˆ j | | | ƒ } | | | ƒ t j	 d d | d | ƒ} | | | ƒ qx Wd }	 ˆ j
 |	 ˆ  t j d d t j ƒd f ƒ ˆ j
 |	 ˆ  t j d d t j ƒd f ƒ t j d ƒ d f }
 d } ˆ j ˆ  |
 | ƒ ˆ j |	 ˆ  t j d	 d t j ƒd f ƒ ˆ j ˆ  t j d ƒ d f ƒ ˆ j ˆ  t j d d g d d g g ƒ d f ƒ d  S(   NRj   c           sŠ   t  |  | ƒ } ˆ  |  | ƒ } ˆ j | d ƒ d t j |  j ƒ j } t j j | | d | d | ƒˆ j ƒ   ˆ  |  | ƒ Wd  QXd  S(   NRH   i   Ró   Rô   (	   R·   Rè   R   Rï   R"   Rð   Rñ   Rò   R@   (   R   t   pwrRD   RE   RC  (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ®  s    i   i   i   ißÿÿÿiïÿÿÿiöÿÿÿi
   i   i!   Rù   i    R"   RG   R¶   i   i   s   input must be a square arrayg333333ó?g        iÿÿÿÿ(   i   i   (   i   i   (   i   i   (   i    i    (   i   i   (   i   i   (   i   i   (   i   i   (   R   R,   R·   t   listRN   R   Rk   RØ   R   RL   Râ   R  Rþ   RÞ   Rå   Rl   Ry  Rî   RÊ   (   R   R  Rÿ   t   powersRJ   Rz  R"   RG   R   R  RC   Re   (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_linalg_matrix_powerª  s,    )((   R†   R‡   Rˆ   Ry  R
  R}  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyRx  ž  s   	t	   TestTracec           B  s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    Tests for np.trace.
    c         C  sG   t  t |  ƒ j ƒ  t d t ƒ t ƒ |  _ t d t ƒ t ƒ |  _ d  S(   NRj   (	   t   superR~  R   R   R,   Rº   t   cfunc_w_offsetR»   t   cfunc_no_offset(   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR   å  s    c         K  s4   | | ƒ |  j  t j ƒ  | | |  Wd  QXd  S(   N(   R`   R   Rg   (   R   RB   R   R  (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   assert_int_offsetë  s    
c   
        s  ‡  f d †  } d d d d d g } d d d	 g t  t d
 d ƒ ƒ d d d g } x® t | | ˆ  j d ƒ D]” \ } } } } ˆ  j | | | ƒ } | | d | ƒ| d k r¼ | | ƒ n  t j d d | d | ƒ} | | d | ƒ| d k rl | | ƒ ql ql Wd }	 ˆ  j |	 ˆ  j t j	 d d t j
 ƒd f t ƒ ˆ  j |	 ˆ  j t j	 d d t j
 ƒf t ƒ ˆ  j ˆ  j t j	 d ƒ d d ƒd  S(   Nc           sª   d | k r' t  |  |  } ˆ  j } n t |  |  } ˆ  j } | |  |  } d t j |  j ƒ j } t j j	 | | d | d | ƒˆ  j
 ƒ   | |  |  Wd  QXd  S(   NR¹   i   Ró   Rô   (   Rº   R€  R»   R  R   Rï   R"   Rð   Rñ   Rò   R@   (   R   R  RD   RB   RE   RC  (   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ô  s    	i   i   i   i   i   ióÿÿÿiôÿÿÿiõÿÿÿiöÿÿÿi
   i   i   Rù   R¹   i    R"   RG   R¸   i   g333333ó?(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i    (   i   i   (   R{  RN   R   Rk   RØ   R   RL   Rå   R€  R  Rl   R   R  R‚  (
   R   R  Rÿ   t   offsetsRJ   R¹   R"   RG   R   R  (    (   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   test_traceò  s*    /("c         C  s‚   t  d d t ƒd „  ƒ } t j d d t j ƒ} | | ƒ |  j t ƒ  } | d ƒ Wd QXt | j	 ƒ } |  j
 d | ƒ d S(	   s
   Issue 2314s   (optional(float64[:,:]),)Rj   c         S  s   t  j |  ƒ S(   N(   R   R¸   (   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   tested&	  s    i   R"   Ns(   expected array(float64, 2d, A), got None(   i   i   (   R   R,   R   R  Rl   R`   t	   TypeErrorRs   R4   Rb   R6   (   R   R…  R   Rd   t   errmsg(    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   test_trace_w_optional_input$	  s    
(   R†   R‡   Rˆ   R   R‚  R„  Rˆ  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR~  à  s
   			2t
   TestBasicsc           B  sƒ   e  Z e d  d d d  g ƒ Z e d d  d d  g ƒ Z d d d d d d d d g Z d „  Z d „  Z d	 „  Z d
 „  Z	 d „  Z
 RS(   RI   RH   i   i   i   g      @g      @c         C  s„   |  j  | | t j d g g g d t j ƒt j d ƒ f t ƒ |  j  | | t j d ƒ t j d g g g d t j ƒf t ƒ d  S(   Ni   R"   (   R=  R   RÊ   Rl   R  R   (   R   R  RB   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   _assert_wrong_dim=	  s    :c         C  sh   t  | t ƒ s | St | ƒ d k r9 |  j | d | ƒ S|  j | d | d | ƒ j | d | ƒSd  S(   Ni   i    RG   (   RÄ   Rç   R0   R$   R%   (   R   RJ   R"   RG   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   _gen_inputD	  s    	c         C  s~   |  j  | | t |  j ƒ ƒ } |  j  | | t |  j ƒ ƒ } t j | ƒ rX | d } n  t j | ƒ rt | d } n  | | f S(   Ny              ð?(   R‹  RH  t   order1t   order2R   R  (   R   t   size1t   size2R"   R   R   (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   _get_inputP	  s    c           só   t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } xµ t ˆ j ˆ j ˆ j ƒ D]˜ \ } } } ˆ j | | | ƒ \ } } | | | ƒ t d k rC t j	 t j
 | ƒ j t j
 | ƒ j f d t j
 | ƒ j ƒ} | | | d | ƒqC qC Wˆ j d ˆ  ƒ d  S(	   NRj   c           sé   t  |  | ƒ } ˆ  |  | ƒ } d t j t j |  ƒ j ƒ j } t j j | | d | d | ƒd | k rÂ ˆ  |  | |  } t j j | | d | d | ƒt j j | d | d | d | ƒn  ˆ j ƒ   ˆ  |  | |  Wd  QXd  S(   Ni   Ró   Rô   R   (	   R½   R   Rï   t   asarrayR"   Rð   Rñ   Rò   R@   (   R   R   R  RD   RE   RC  (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  ]	  s    "i   i	   R"   R   R¼   (   i   i	   (   R   R,   R½   R   Rÿ   Rk   R  RÙ   R   RL   R‘  RJ   R"   RŠ  (   R   R  RŽ  R  R"   R   R   RE  (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt
   test_outerZ	  s    (*c   	        sì   t  d t ƒ t ƒ ‰  ‡  ‡ f d †  } xT t ˆ j ˆ j ˆ j ƒ D]7 \ } } } ˆ j | | | ƒ \ } } | | | ƒ qC Wˆ j d ˆ  ƒ t j	 d ƒ d  d  d … t j	 d ƒ d  d  d … f } d } ˆ j
 ˆ  | | d t j ƒd  S(   NRj   c           sƒ   t  |  | ƒ } ˆ  |  | ƒ } d t j t j |  ƒ j ƒ j } t j j | | d | d | ƒˆ j ƒ   ˆ  |  | ƒ Wd  QXd  S(   Ni   Ró   Rô   (	   R¿   R   Rï   R‘  R"   Rð   Rñ   Rò   R@   (   R   R   R  RD   RE   RC  (   RB   R   (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR  €	  s    "R¾   i
   i   s   only supports 'C' or 'F' layoutRÝ   (   R   R,   R¿   R   Rÿ   Rk   R  RŠ  R   RL   RÞ   R   Rg   (	   R   R  RŽ  R  R"   R   R   RC   Re   (    (   RB   R   s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt	   test_kron}	  s    (8(   i   i   (   i   i   (   i   i   (   i   (   i   (   i   (   R†   R‡   R   RŒ  R  Rÿ   RŠ  R‹  R  R’  R“  (    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyR‰  4	  s   			
	#t   __main__(V   t
   __future__R    R   R‹   R   t	   itertoolsR   R   t   sysR*   t   numbersR   R   t   platformt   numpyR   t   numbaR   t   unittestR   R   t   numba.numpy_supportR	   RÙ   t   supportR
   R   R   R   R   t   machineR\   t   scipy.linalg.cython_lapackt   scipyR,   t
   has_lapackt   ImportErrorR   t
   skipUnlessR
  R   R   R   R   R   R’   R”   R–   R˜   Rš   R   RŸ   R¤   R¦   R¨   Rª   R¬   Rs   R¯   R²   Rµ   R·   Rº   R»   R½   R¿   RÀ   Rø   R  R  R  R0  R8  R<  R@  R\  R_  Rc  Rk  Ro  Rv  Rx  R~  R‰  R†   t   main(    (    (    s6   lib/python2.7/site-packages/numba/tests/test_linalg.pyt   <module>   sŠ   

					ÿ %														Òj:XÁd_ò{qi]kBTd