
    tKg	                       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Zd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d d	lm=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d d
lPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW 	 d dlXmYZY de[fdZ\ej                  ej                  gZ^ej                  ej                  gZ`e^e`z   Zad Zb G d d      Zc G d d      Zd G d d      Ze G d d      Zf G d d      Zg G d d      Zh G d deh      Ziej                  j                  d       d!        Zl G d" d#      Zm G d$ d%      Zn G d& d'      Zo G d( d)      Zp G d* d+      Zq G d, d-      ZrdxZsZteYeYd.   d/   d0   ZseYd.   d/   d1   Zt G d2 d3      Zu G d4 d5      Zv G d6 d7      Zw G d8 d9      Zxd: Zyej                  j                   ej                         d;k(  d<=      d>        Z|d? Z}d@ Z~ej                  j                  ddAB      dC        Z G dD dE      ZdRdFZej                  j                  ej                  j                   ej                  ej
                        j                  dGk  dH=      dI               ZdJ Zej                  j                  dKee[ej                  eej                  g      dL        ZdM Zej                  j                  dKee[ej                  eej                  g      dN        ZdO Z G dP dQ      Zy# eZ$ r dZYY w xY w)S    N)assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_assert_allclose)raises)eigeigvalslusvdsvdvalscholeskyqrschurrsf2csflu_solve	lu_factorsolvediagsvd
hessenbergrq
eig_bandedeigvals_bandedeigheigvalshqr_multiplyqzorthordqzsubspace_angleshadamardeigvalsh_tridiagonaleigh_tridiagonal
null_spacecdf2rdfLinAlgError)	dgbtrfdgbtrszgbtrfzgbtrsdsbevdsbevddsbevxzhbevdzhbevx)norm)_select_function)ortho_group)arraydiagfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeye)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIGFc                    |t         v ret        j                  j                  | |       t        j                  j                  | |       dz  z   }||j	                         j
                  z   dz  }n2t        j                  j                  | |       }||j
                  z   dz  }|r'|t        d| z        t        j                  |       z  z  }|j                  |      S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprandomrandconjTr>   rF   astype)nposdefdtypeAs       b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr[   )   s    IINN1a 299>>!Q#7#<<^QIINN1a WaK	T!A#Yrvvay  88E?    c                    t        | t              r| }|j                  |      dz  dz
  }nEt        | t              r*t	        | j
                        dk(  r| j
                  d   }| }nt        d      t        j                  |      }|j                  j                         t        |      z  |z  }d|j                  |z   z  }|S )a  Return a random symmetric (Hermitian) matrix.

    If 'dim_or_eigv' is an integer N, return a NxN matrix, with eigenvalues
        uniformly distributed on (-1,1).

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rN      r   zinput type not supported.      ?)
isinstanceintrQ   rE   lenr@   	TypeErrorr3   rvsrT   rS   r5   )dim_or_eigvrngdimdvhs         rZ   symrandrk   ?   s     +s#JJsOA!
['
*
k
 A
%"344A	
T!Wq AQSSUAHr\   c                   r    e Zd Zd Zd Zd Zd Zej                  j                  de
eeeeg      d        Zy)TestEigValsc                     g dg dg dg}t        |      }dt        d      z   dz  ddt        d      z
  dz  g}t        ||       y )Nr^   rN      rN         	   ]   rN   r   r   r>   r   selfawexact_ws       rZ   test_simplezTestEigVals.test_simple[   sE    	9-AJd2hJ>1qbz1n5!!W-r\   c                     t        g dg dg dgd      j                  }|j                         }|j                  }t        |      }dt	        d      z   dz  ddt	        d      z
  dz  g}t        ||       y )Nro   rq   rh   rt   ru   rN   r   )r4   rT   copyr   r>   r   rw   s       rZ   test_simple_trzTestEigVals.test_simple_tra   sf    9i3S9;;FFHCCAJd2hJ>1qbz1n5!!W-r\   c                     g dg dg dg}t        |      }dt        d      z   dz  ddt        d      z
  dz  g}t        ||       y )Nro   rN   rr   y      @      ?y      "@      ?y      W@      @rN   r   rv   rw   s       rZ   test_simple_complexzTestEigVals.test_simple_complexi   sO    	<0AJe$a'e$a') 	"!W-r\   c                     g dg dg dg}t        |d      }dt        d      z   dz  ddt        d      z
  dz  g}t        ||       y )	Nro   rq   Fcheck_finitert   ru   rN   r   rv   rw   s       rZ   test_finitezTestEigVals.test_finiteq   sH    	9-AE*d2hJ>1qbz1n5!!W-r\   dtc                    t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ t        |d      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ y )Nr   r   rX   r   rN   Thomogeneous_eigvalsrN   r   )rP   emptyr   r@   rX   rF   )rx   r   ry   rz   s       rZ   
test_emptyzTestEigVals.test_emptyw   s    HHV2&AJww$ww'"&&""56<<<<<A40ww&   ww'"&&""56<<<<<r\   N)__name__
__module____qualname__r|   r   r   r   pytestmarkparametrizera   floatr;   complexr<   r    r\   rZ   rm   rm   Y   sG    .... [[TC)#LM= N=r\   rm   c                       e Zd Zd Zd Zd Zd Z	 	 ddZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  j%                  deeej,                  eej0                  g      d        Zy)TestEigc                 b   t        g dg dg dg      }t        |      \  }}dt        d      z   dz  ddt        d      z
  dz  g}t        dddt        d      dz  z   dz  g      }t        g d	      }t        dddt        d      dz  z
  dz  g      }|t        |      z  }|t        |      z  }|t        |      z  }t	        ||       t	        ||d d df   t        |d
         z         t	        ||d d df   t        |d         z         t	        ||d d df   t        |d         z         t        d      D ]%  }t	        ||d d |f   z  ||   |d d |f   z         ' t        |dd      \  }}t        d      D ]/  }t	        |j                  |d d |f   z  ||   |d d |f   z         1 y )Nro   rq   rt   ru   rN   r   r^   rp         @r   r   r   r^   r   rN   leftright)r4   r
   r>   r1   r   rB   rangerT   	rx   ry   rz   ri   r{   v0v1v2is	            rZ   r|   zTestEig.test_simple   s   9i341v1d2hJ>1qbz1n5Aq1T"XaZ<*+,;Aq1T"XaZ<*+,$r(]$r(]$r(]!!W-!"a1gd1T7m&;<!"a1gd1T7m&;<!"a1gd1T7m&;<qA%a!AqD'k1Q4!Q$<@ 11A&1qA%accAadGmQqT!AqD'\B r\   c                    t        ddgddgg      }t        |dd      \  }}}t        |t        ddg             t        d      D ]%  }t        ||d d |f   z  ||   |d d |f   z         ' t        d      D ]K  }t        |j	                         j
                  |d d |f   z  ||   j	                         |d d |f   z         M y )Nr^   rN   r         ?       @y      ?       )r4   r
   r   r   rS   rT   rx   ry   rz   vlvrr   s         rZ   test_simple_complex_eigzTestEig.test_simple_complex_eig   s    Aq6B7#$+	2r!!UD$<%89qA%a"QT(lAaDAqDMB qA%affhjj2ad8&;&'diik"QT(&:< r\   c                 h   t        g dg dg dg      }t        |dd      \  }}}t        d      D ]%  }t        ||d d |f   z  ||   |d d |f   z         ' t        d      D ]K  }t        |j	                         j
                  |d d |f   z  ||   j	                         |d d |f   z         M y )Nro   r   r^   r   rp   )r4   r
   r   r   rS   rT   r   s         rZ   r   zTestEig.test_simple_complex   s    9i67+	2rqA%a"QT(lAaDAqDMB qA%affhjj2ad8&;&'diik"QT(&:< r\   c                     dgg}dgg}t        ||d      \  }}t        |d   d       t        |d   dk7         t        |d       t        ||      \  }}t        |t        j
                         t        |d       y )Nr^   r   Tr   r^   r   r   )r
   r   r   r   rP   inf)rx   ry   brz   r   s        rZ   test_gh_3054zTestEig.test_gh_3054   su    SESEAqd32$#$1AAq	2QAr\   c           	      T   |t        |      t        |      }}|}n)t        |      }|}t        j                  |j                   }d|d|}t	        ||d      \  }	}
t        ||d      }||
z  |	dd d f   z  }||
z  |	dd d f   z  }t        |j                  d         D ]   }t        |d d |f   |d d |f   |||       " |&t        |	dd d f   d       t        |dd d f   d       t        j                  |	      }t        j                  |      }t        |	d d |f   |d d |f   dd|       t        j                  t        |
            }t        t        |
            D ]  }t        |
d d |f         ||<    t        |t        j                  |j                        |dd	       |	dd d f   dk7  }|	d|f   |	d|f   z  }t	        ||      \  }	}
t        ||      }||
z  }||
z  |	z  }||z
  }t        |j                  d         D ]?  }t        j                  t        |d d |f               s)t        |d d |f   d|||       A |	t        |	         }|t        |         }d
t        j                   d|z  d      z  }d
t        j                   d|z  d      z  }t#        t%        |      |j&                  z         }t#        t%        |      |j&                  z         }t        ||   ||   dd|       t        j                  t        |
            }t        t        |
            D ]  }t        |
d d |f         ||<    t        |t        j                  |j                        |       t        t)        |      t)        |	t        j                  |	                      y )N
Tr   r^   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   y             rM   g|=)tolr   )rC   rP   rF   r@   r
   r   r   r   lexsortr   rb   r1   onessizeallrD   real_if_closer8   absimagrA   )rx   rY   B
atol_homog
rtol_homogr   r   B0msgrz   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_fins                          rZ   _check_gen_eigzTestEig._check_gen_eig   sg   =1:wqzqAB
AB A1%r! Art42Q52v!Q$2v!Q$tzz!}%ADAJQT
!+*cK & :AadGQ'Bq!tHa(zz!}

2!T'
Bq%xLt$ #	% #b'"s2wAR1XF1I   	 4c!	. !Q$1q,!A|O"44 Ar
2Q^2v2vzTksyy|$Avvhs1a4y)*AqD	1%)cC % (1+HRL! b&&r%xU;;r''6	u==s5zEJJ./Ffkk12dVE]!c	; #b'"s2wAR1XF1I   4cB 	R$qQ'8"9:r\   c                     t        g dg dg dg dg dg      }t        g dg dg dg d	g d
g      }t        j                  d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY w)N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   r   )r4   rP   errstater   rx   rY   r   s      rZ   test_singularzTestEig.test_singular  ss     '''''	) *
 '''''	) * [[X&1UC '&&s   A**A3c                    t        t        g d            }t        g dg dg df      }t        g dg dg df      }t        d      }t        d	      }t	        j
                  ||g|| gg      }t	        j
                  ||g||gg      }t	        j                  d
      5  | j                  ||       d d d        y # 1 sw Y   y xY w)N)r^   r   rp   )rN   r   r   )r   rN   r   )r   r   rN   )r^   r   r   )r   r^   r   r   r   r   rp   rp   rp   r   r   )r5   r4   r9   rF   rP   blockr   r   )rx   MKDZI3rY   r   s           rZ   test_falkerzTestEig.test_falker  s    y!";[9::z956&MVHHr1gA2w'(HHq"g1v&'[[X&1% '&&s   "B>>Cc                     d }t        j                  d      5  t        d      D ]&  } ||dz  dz        \  }}| j                  ||       ( 	 d d d        y # 1 sw Y   y xY w)Nc                 n    d| dz  z   }d| z  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	NrN   )r^   r   r   r   )r   r^   r   r   r   )r   r   r^   r   )r   r   r   r^   r^   r   )omegac1c2rY   r   s        rZ   matricesz)TestEig.test_bad_geneig.<locals>.matrices#  sm    eQhB5BQAQ2 A QB3QA A a4Kr\   r   r   d         @)r  )rP   r   r   r   )rx   r  krY   r   s        rZ   test_bad_geneigzTestEig.test_bad_geneig   sU    	 [[X&3Zad3h/1##Aq)   '&&s   5AA"c                    t         j                  j                  d      }t        d|      }| j	                  |d        t        d|      }| j	                  ||       |j                  d      d|j                  d      z  z   }| j	                  |d        |j                  d      d|j                  d      z  z   }| j	                  ||       y )N  rp   r   rM   )rP   rQ   RandomStaterk   r   )rx   rf   rY   r   s       rZ   test_make_eigvalszTestEig.test_make_eigvals7  s     ii##D)AsOAt$AsOAq!JJvCJJv$6!66At$JJvCJJv$6!66Aq!r\   c                    g dg dg dg}t        |d      \  }}dt        d      z   dz  ddt        d      z
  dz  g}t        d	d	d	t        d      d
z  z   dz  g      }t        g d      }t        d	d	d	t        d      d
z  z
  dz  g      }|t        |      z  }|t        |      z  }|t        |      z  }t	        ||       t	        ||d d df   t        |d         z         t	        ||d d d	f   t        |d         z         t	        ||d d df   t        |d         z         t        d
      D ]%  }t	        ||d d |f   z  ||   |d d |f   z         ' y )Nro   rq   Fr   rt   ru   rN   r   r^   rp   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            rZ   test_check_finitezTestEig.test_check_finiteE  sR   	9-15)1d2hJ>1qbz1n5Aq1T"XaZ<*+,;Aq1T"XaZ<*+,$r(]$r(]$r(]!!W-!"a1gd1T7m&;<!"a1gd1T7m&;<!"a1gd1T7m&;<qA%a!AqD'k1Q4!Q$<@ r\   c                 x    t        j                  d      j                  dd      }t        t        t
        |       y)z:Check that passing a non-square array raises a ValueError.rs   rp   rN   N)rP   r:   reshapeassert_raises
ValueErrorr
   )rx   rY   s     rZ   test_not_square_errorzTestEig.test_not_square_errorV  s(    IIaL  A&j#q)r\   c                     t        d      }t        j                  d      j                  dd      }t	        t
        t        ||       t	        t
        t        ||       y)zOCheck that passing arrays of with different shapes
        raises a ValueError.rN         "@rp   N)rF   rP   r:   r  r  r  r
   r   s      rZ   test_shape_mismatchzTestEig.test_shape_mismatch[  sC     FIIcN""1a(j#q!,j#q!,r\   c                    t        j                  g dg dg dg dgd      }t        j                  g dg dg d	g d
gd      }t        ||      \  }}t         j                  j	                         5 }|j                  t        d       t        j                  |dd      j                         sJ t        j                  |dd      j                         sJ 	 d d d        y # 1 sw Y   y xY w)N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r   g      L@g      Z@g      o@float64r   )       @      @      $@r  )r   r        &@g      =@)r        @g      *@g      ?@)r  r%  g      1@g     A@z%invalid value encountered in multiplyr#  +=r          @)	rP   r4   r
   testingsuppress_warningsfilterRuntimeWarningiscloseany)rx   rY   r   r  Vsups         rZ   test_gh_11577zTestEig.test_gh_11577c  s     HH///02 :CD HH,,,-/ 7@A
 1ay1 ZZ))+sJJ~'NO::a5155777::a5155777	 ,++s   4A'C%%C.r   c                 R   t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ t        |t        j                  d             |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rN   r   Tr   r   )rP   r   r
   rF   r@   rX   r   )rx   r   ry   rz   r   w_nvr_ns          rZ   r   zTestEig.test_empty  s    HHV2&A2q+,	Tww$ww#))###BHHV,-xx6!!!xx4::%%%A402ww&   ww#))###xx6!!!xx4::%%%r\   N)vIh%<=r6  r6  r6  )r   r   r   r|   r   r   r   r   r   r  r  r  r  r  r  r2  r   r   r   ra   r   rP   r;   r   r<   r   r   r\   rZ   r   r      s    C(<<
 AF49H;TD"&*."A"*
-88 [[TC

GR\\#RS& T&r\   r   c                       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ej"                  j%                  deeej,                  eej0                  g      d        Zy)TestEigBandedc                 $    | j                          y N)create_bandmatrx   s    rZ   setup_methodzTestEigBanded.setup_method  s    r\   c                    d}d| _         d| _        t        t        |d            t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        t        |d            d	t        t        |dz
  d      d      z  z   d	t        t        |dz
  d      d      z  z
  t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        t        |d            t        t        |dz
  d      d      z   t        t        |dz
  d
      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        d	t        t        |d            z  t        t        |dz
  d      d      z   d	t        t        |dz
  d
      d      z  z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        j                  | j                        \  }}|j                  }t        |      }||   | _        |dd|f   | _        t        j                  | j
                        \  }}|j                  }t        |      }||   | _        |dd|f   | _        | j                  dz   }t!        ||ft"              | _        t!        ||ft&              | _        t+        |      D ]\  }t        | j                  |      | j$                  ||z
  dz
  ||f<   t        | j
                  |      | j(                  ||z
  dz
  ||f<   ^ d| j                   z  | j                  z   dz   }t!        ||ft"              | _        t        | j                        | j,                  d| j                   z  ddf<   t+        | j                         D ]  }t        | j                  |dz         | j,                  d| j                   z  dz
  |z
  |dz   |f<   t        | j                  | dz
        | j,                  d| j                   z  dz   |z   d|dz
  |z
  f<    t!        ||ft&              | _        t        | j                        | j.                  d| j                   z  ddf<   t+        | j                         D ]  }t        | j                  |dz         | j.                  d| j                   z  dz
  |z
  |dz   |f<   t        | j                  | dz
        | j.                  d| j                   z  dz   |z   d|dz
  |z
  f<    dt1        |      z  | _        | j2                  dz  | _        y)zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rN         ?r^         r          r   rM         r"  Nr   r         ?      ?)KLKUr5   r6   sym_matherm_matreal_matcomp_matr7   r
   realr8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   r   bandmat_symr   bandmat_hermr   bandmat_realbandmat_compr:   r   bc)rx   NewevargsLDABr   s          rZ   r;  zTestEigBanded.create_bandmat  s     T!S\*tAaC346:4!T?A6NOtAaC346:4!T?A6NO
 d1dm,d4!S>2667d4!S>1556  QqS$45  QqS$3	4 d1cl+QqS$457;D1dOQ7OPQqS#346:4!T?A6NO
 Da..QqS$45d4!T?A667  QqS#34  QqS$3	4 DLL)BWWr{Dq$wKDMM*BWWr{T(4[
 ww{ $%8!4)7;tA.24<<.CDT!VAXqs]+/3DMM1/EDd1fQh!m,  y477"Q&!4)59*.t}}*=!DGG)Q,'twwA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45	   "4)7;*.t}}*=!DGG)Q,'twwA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45	   VAY&&F#r\   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.r^   	compute_vN)r,   rP  r8   r   rA   rL  r   rM  rx   rz   evecinfoevec_s        rZ   
test_dsbevzTestEigBanded.test_dsbev  sY     d..!<4Q
]#!$q'4>>:!#e*c$2C2C.DEr\   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r^   r[  N)r-   rP  r8   r   rA   rL  r   rM  r]  s        rZ   test_dsbevdzTestEigBanded.test_dsbevd  sY     t//1=4Q
]#!$q'4>>:!#e*c$2C2C.DEr\   c           	      *   t        | j                        \  }}t        | j                  ddd|dd      \  }}}}}|ddt	        |      f   }t        t        |      | j                         t        t        |      t        | j                               y)zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        r^   rN   r\  r   N)
r@   rG  r.   rP  r8   r   rA   rL  r   rM  rx   rU  rz   r^  numifailr_  r`  s           rZ   test_dsbevxzTestEigBanded.test_dsbevx  s~     T\\"1$*4+;+;S#q!56a%A!4eTQ
]#!$q'4>>:!#e*c$2C2C.DEr\   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r^   r[  N)r/   rQ  r8   r   rA   rN  r   rO  r]  s        rZ   test_zhbevdzTestEigBanded.test_zhbevd  sY     t00A>4Q
]#!$q'4??;!#e*c$2D2D.EFr\   c           	      *   t        | j                        \  }}t        | j                  ddd|dd      \  }}}}}|ddt	        |      f   }t        t        |      | j                         t        t        |      t        | j                               y)zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.re  r^   rN   rf  N)
r@   rH  r0   rQ  r8   r   rA   rN  r   rO  rg  s           rZ   test_zhbevxzTestEigBanded.test_zhbevx  s~     T]]#1$*4+<+<c3156a%A!4eTQ
]#!$q'4??;!#e*c$2D2D.EFr\   c                 >   t        | j                        }|j                  }t        t	        |      | j
                         t        | j                        }|j                  }t        t	        |      | j                         d}t        j                  d      }t        | j                  d||f      }t        t	        |      | j
                  ||dz           t        | j                  d||f      }t        t	        |      | j                  ||dz           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  d||f      }	t        t	        |	      | j
                  ||dz           | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      }
t        t	        |
      | j                  ||dz           t        | j                  d	      }|j                  }t        t	        |      | j
                         y
)z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rN   rs   r   selectselect_ranger^   h㈵>ri   Fr   N)
r   rP  rK  r   rA   rL  rQ  rN  rP   longlong)rx   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              rZ   test_eigvals_bandedz!TestEigBanded.test_eigvals_banded  s   t//0

!$u+t~~> 1 12!$v,@ {{1~"4#3#3*-T4LJ	!$y/"&..d1f"=	?#D$5$5+.dD\K
!$z"2"&//$tAv">	@ ..&/..&/"4#3#3*-Wg<NP	!$y/"&..d1f"=	? //$'&0//$'&0#D$5$5+.2971CE
 	"$z"2"&//$tAv">	@ t//eD

!$u+t~~>r\   c           
      2   t        | j                        \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               t        | j                        \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               d}d}t        | j                  d||f      \  }	}
t	        t        |	      | j                  ||dz           t	        t        |
      t        | j                  dd||dz   f                t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                t        | j                  d	
      \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               y)zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrN   rs   r   rp  r^   rs  ri   Fr   )r   rP  r8   rK  r   rA   rL  r   rM  rQ  rN  rO  )rx   ru  evec_sym	evec_sym_rv  	evec_herm
evec_herm_rw  rx  ry  evec_sym_indrz  evec_herm_indr{  r|  r}  evec_sym_valr~  evec_herm_vals                      rZ   test_eig_bandedzTestEigBanded.test_eig_bandedC  s>    %T%5%56xQ

 334	!$u+t~~>!#i.#d6G6G2HI&t'8'89	q'&++"667
!$v,@!#j/3t7I7I3JK ",T-=-=47;?,#H	< 	"$y/"&..d1f"=	?!#l"3"%d&7&74Q;&G"H	J %/t/@/@69=A4L%J!
M 	"$z"2"&//$tAv">	@!#m"4"%d&8&8DaK&H"I	K ..&/..&/",T-=-=47;BG:L#N	< 	"$y/"&..d1f"=	?!#l"3"%d&7&74Q;&G"H	J //$'&0//$'&0$.t/@/@69=Dg<N%P!
M 	"$z"2"&//$tAv">	@!#m"4"%d&8&8DaK&H"I	K %T%5%5EJxQ

 334	!$u+t~~>!#i.#d6G6G2HIr\   c                    t        | j                        \  }}t        | j                  | j                  | j
                        \  }}}t        |d| j                  z  ddf         }t        | j                  | j
                  z         D ]1  }|t        |d| j                  z  dz
  |z
  |dz   |f   |dz         z  }3 t        | j                  d      \  }}	}
t        ||
       y)zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nr^   r   	permute_l)
r@   rI  r(   rR  rE  rF  r5   r   r   r   rx   r   rU  lu_symm_bandipivr_  ur   p_linl_linu_lins              rZ   test_dgbtrfzTestEigBanded.test_dgbtrf}       T]]#1#)$*;*;TWWdgg#N dD ail+,tww()Al1TWW9Q;q=!A#a%#78!A#>>A * !!<ue!!U+r\   c                    t        | j                        \  }}t        | j                  | j                  | j
                        \  }}}t        |d| j                  z  ddf         }t        | j                  | j
                  z         D ]1  }|t        |d| j                  z  dz
  |z
  |dz   |f   |dz         z  }3 t        | j                  d      \  }}	}
t        ||
       y)zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nr^   r   r  )
r@   rJ  r*   rS  rE  rF  r5   r   r   r   r  s              rZ   test_zgbtrfzTestEigBanded.test_zgbtrf  r  r\   c                 .   t        | j                  | j                  | j                        \  }}}t	        || j                  | j                  | j
                  |      \  }}t        j                  | j                  | j
                        }t        ||       y)zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r(   rR  rE  rF  r)   r   r7   r   rI  r   rx   r  r  r_  yy_lins         rZ   test_dgbtrszTestEigBanded.test_dgbtrs  sk     $*$*;*;TWWdgg#N dDtwwF4T]]DFF3!!U+r\   c                 .   t        | j                  | j                  | j                        \  }}}t	        || j                  | j                  | j
                  |      \  }}t        j                  | j                  | j
                        }t        ||       y)zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r*   rS  rE  rF  r+   rT  r7   r   rJ  r   r  s         rZ   test_zgbtrszTestEigBanded.test_zgbtrs  sk     $*$*;*;TWWdgg#N dDtww$G4T]]DGG4!!U+r\   r   c                    t        j                  d|      }t        |      \  }}t        t        j                  ddgddgg|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      }|j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   r   r^   r   Teigvals_only)rP   r   r   r4   r@   rX   )rx   r   a_bandrz   ri   r4  v_ns          rZ   r   zTestEigBanded.test_empty  s    &+&!1bhhAA'7rBCSww$ww#))###ww&   ww#))###vD1ww$ww#))###r\   N)r   r   r   r=  r;  ra  rc  rj  rl  rn  r  r  r  r  r  r  r   r   r   ra   r   rP   r;   r   r<   r   r   r\   rZ   r8  r8    s    M$bFF	FG	G(?T8Jt,,,, [[TC

GR\\#RS$ T$r\   r8  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestEigTridiagonalc                 $    | j                          y r:  )create_trimatr<  s    rZ   r=  zTestEigTridiagonal.setup_method  s    r\   c                    d}t        |d      | _        t        |dz
  d      | _        t        | j                        t        | j                  d      z   t        | j                  d      z   | _        t        j                  | j                        \  }}|j                  }t        |      }||   | _	        |dd|f   | _
        y)z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r?  r@  r^   rA  r   N)r6   rh   er5   full_matr7   r
   rK  r8   rz   r^  )rx   rU  rV  rW  rX  s        rZ   r  z TestEigTridiagonal.create_trimat  s     aac4dffTVVR(884?JDMM*BWWr{Dq$wK	r\   c                    t        t        t        | j                  | j                  dd        t        t
        t        | j                  | j                  dz         t        t
        t        | j                  | j                  d       t        t        t        | j                  | j                  d       t        t        t        | j                  | j                  dd	       y)
zTest error conditions.Nr   rM   r@  lapack_driverfoor   r   r   rp  )r  r  r#   rh   r  rc   r<  s    rZ   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6sLi!5tvvtvv{Ki!5tvvtvv$&	(j"6$)	+ 	j"6 w	8r\   c           
      B   dD ]C  }t        | j                  | j                  |      }t        t	        |      | j
                         E dD ]0  }t        t        t         | j                  | j                  ddd       2 dD ]  }t        | j                  | j                  dd	t        | j                        d
z
  f|      }t        t	        |      | j
                         d}d}t        | j                  | j                  d||f|      }t        t	        |      | j
                  ||d
z           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  | j                  d||f|      }t        t	        |      | j
                  ||d
z            y)z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r  r   r   r  rq  rr  r  r  r  r   r^   rq  rr  r  rN   rs   rs  ri   N)	r#   rh   r  r   rA   rz   r  r  rb   )	rx   driverrz   w_indrw  rx  r{  r|  w_vals	            rZ   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  si    BF$TVVTVV6JA%d1gtvv6 B (F*&:DFFDFF(.s'-/ ( 1F(s!S[]9K$&E &d5k466: DD(s$$&E &d5k466$tAv3FG ffTlV+GffTlV+G(s'79K$&E &d5k466$tAv3FG+ 1r\   c                 @   t        t        t        | j                  | j                  d       dD ]  }t        | j                  | j                  |      \  }}|ddt        |      f   }t        t        |      | j                         t        t        |      t        | j                                t        t        t        | j                  | j                  ddd       d	D ]  }d
}t        | j                        dz
  }t        | j                  | j                  d||f|      \  }}t        t        |      | j                         t        t        |      t        | j                               d}d}t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                 y)zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   r^   r  rN   rs   rs  ri   )r  r  r$   rh   r  r8   r   rA   rz   r   r^  rb   )	rx   r  rz   r^  r`  rw  rx  r{  r|  s	            rZ   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s$    	j"2DFFDFF$+	-8F&tvvtvvVLGAtGAJ'E%d1gtvv6%c%j#dii.A	 9 	j"2DFFDFF$*3V	M0FDtvv;q=D&s$$&GAt &d1gtvv6%c$iTYY@DD&s$$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF ffTlV+GffTlV+G&s'79K$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF3 1r\   c                    t        j                  dg      }t        j                  g       }t        ||d      }|j                  dk(  sJ t	        ||       t        ||dd      \  }}|j                  dk(  sJ |j                  dk(  sJ t	        ||       t	        |t        d	gg             t        ||d
d      \  }}|j
                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y)zSee gh-20075rB  Tr  r^   r   r   rp  rN   r@  ri   )r   r   r   r   r   N)rP   r4   r$   ndimr   r   r@   )rx   ry   r   xr0  s        rZ   test_eigh_tridiagonal_1x1z,TestEigTridiagonal.test_eigh_tridiagonal_1x1,  s    HHdVHHRLQ5vv{{11SvF1vv{{vv{{152$=)1SwG1vv{{ww$ww&   r\   N)	r   r   r   r=  r  r  r  r  r  r   r\   rZ   r  r    s$     8 HD(FT!r\   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  de      e	j                  j                  dd	      d
               Ze	j                  j                  dd	      d        Ze	j                  j                  dd      e	j                  j                  dd      d               Zd Ze	j                  j                  deeej(                  eej,                  g      d        Zy)TestEighc                 B    t         j                  j                  d       y )Nr  )rP   rQ   seedr<  s    rZ   setup_classzTestEigh.setup_class@  s    
		tr\   c           	         t        t        t        t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      ddgddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      d	dg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg
       t        t        t        t        j                  ddg      d       t        t        t        t        j                  ddg      d d       t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      dddg       t        t        t        t        j                  ddg      t        j                  ddg      dddg       y )Nr^   rN   rp      )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r  r  r   rP   r   r<  s    rZ   test_wrong_inputszTestEigh.test_wrong_inputsC  sT   j$A8j$A!QIj$A!QIj$A!Q	 	j$A!Q'(!fq!f	F 	j$A!Q'(!f	. 	j$A!Q')1g	/ 	j$A!Q'(!f	. 	j$A!Q'(!f	. 	j$AHj$AeLj$A!Q"	$ 	j$A!Q"QF	<j$A!Q"QF	<r\   c           	          t        t        t        t        j                  ddg      t        j                  ddg             y )Nrp   )r  r'   r   rP   r   r<  s    rZ   test_nonpositive_bzTestEigh.test_nonpositive_bi  s(    k4!Q"''1a&/Jr\   c                    t        t              D ]  \  }}t        d|      }t        |ddg      \  }}t	        |j
                  d   t        |             t        |dkD  |dk  z        sJ t        dd|      }t        ||ddg      \  }}t	        |j
                  d   t        |             t        |dkD  |dk  z        rJ  y )	N   r   r   rN   r  r^   T)rW   rX   )	enumerateDTYPESr[   r   r   r@   rb   r   )rx   indr   ry   rz   ri   r   s          rZ   test_value_subsetszTestEigh.test_value_subsetsm  s     (GC(26AB73DAqSV,B1q5)***(DCA1r1g6DAqSV,B1q5)*** )r\   c                     t        ddgddgg      }t        ddgddgg      }t        |      \  }}t        ||      \  }}y )Nr^   rN      rp   rr   )r4   r   )rx   ry   r   rz   zs        rZ   test_eigh_integerzTestEigh.test_eigh_integerz  sL    Aq6Aq6"#Aq6Aq6"#Aw1Aqz1r\   c                     dd l }|j                  j                  d      j                         }t	        j
                  |      }t        t        t        |       t        t        t        |       y )Nr   rN   )	scipy.sparsesparseidentitytocscrP   
atleast_2dr  r  r   )rx   scipyry   r   s       rZ   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse  sH    LL!!!$**,MM!j$*j$*r\   dtype_r  )rW  evdr  evxc                     t        d|      }t        ||      \  }}t        ||z  ||z  z
  ddt        j                  |      j
                  z  d       y )Nr  )rV   rX   r  re    r   r   )r[   r   r   rP   finfoeps)rx   r  r  ry   rz   ri   s         rZ   test_various_drivers_standardz&TestEigh.test_various_drivers_standard  sR     %r8Af%1AQ!"((6"2"6"66	!r\   c                    t        dgg|      \  }}t        |t        dg      d       t        |t        dgg      d       t        dgg|      \  }}t        |t        dg      d       t        |t        dgg      d       y )Nr^   r  r@  gV瞯<r(  rM   r   )r   r   r4   )rx   r  rz   ri   s       rZ   test_1x1_lworkzTestEigh.test_1x1_lwork  sx    aSE&)15";U352$=u5 bTF6*15!:E252$=u5r\   r  ro   )gvr  r  c                 <   t        j                  d      }t        d      }t        dd      }t        ||||      \  }}|dk(  rt	        ||z  |||z  z  z
  d|d       y |d	k(  rt	        ||z  |z  ||z  z
  d|d       y t	        ||z  |z  ||z  z
  d|d       y )
Ng     @r  T)rW   )ry   r   r  r  r^   re  r  rN   )rP   spacingr[   r   r   )rx   r  r  r   ry   r   rz   ri   s           rZ    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalized  s     zz% $R($R5a1V$7119AEAq1uI-r2FQYAEAIA-r2FAEAIA-r2Fr\   c                 z   t        d      }t        |ddg      }t        t        |      d       t        |ddg      }t        t        |      d       t	        ||       t        j                  g d      }t        |ddg      }t        t        |      d       t	        |t        j                  dd	g             y )
Nrr   r^   rN   r  )r^   333333??      ?rN   gffffff?r  r  r  )r[   r   r   rb   r   rP   r5   r4   )rx   ry   rz   w2r   w3s         rZ   test_eigvalsh_new_argszTestEigh.test_eigvalsh_new_args  s    $Q'QA/SVQa!Q0SWa 2GG)*a!S2SWa BHHc3Z01r\   r   c                    t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      }t        |t        j                  d             |j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rN   r   Tr  )rP   r   r   rF   r@   rX   r   )rx   r   ry   rz   ri   r4  r  s          rZ   r   zTestEigh.test_empty  s    HHV2&Aw1q+,Sww$ww#))###ww&   ww#))###&288D>*ww$ww#))###r\   N)r   r   r   r  r  r  r  r  r  r   r   r   r  r  r  r  r  ra   r   rP   r;   r   r<   r   r   r\   rZ   r  r  ?  s   $<LK++ [[Xv.[[X'BC! D /! [[X'BC6 D6 [[VY/[[X';<
G = 0
G2 [[TC

GR\\#RS$ T$r\   r  c                   L   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ej                   j#                  e d      ej                   j&                  d               Zej                   j+                  dg d      ej                   j+                  dg d      ej                   j+                  de      d                      Zej                   j+                  deeej6                  eej:                  g      ej                   j+                  dg d      d               Zy)TestSVD_GESDDgesddc                 h    t        t        t        dggd       t        t        t        dggd       y )Nr@  r  r  )r  rc   r   r  r<  s    rZ   r  zTestSVD_GESDD.test_degenerate  s&    itfB?j#vUCr\   c                    g dg dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nro   r^   r  rp   rq   TFfull_matricesr  rp   r   r   r  r   rT   rF   r9   r@   rX   charr   rb   rx   ry   r	  r  svhsigmar   s           rZ   r|   zTestSVD_GESDD.test_simple  s    
I.*M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6]dad #%a%i"na8 +r\   c                    g dg dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nro   rq   r  r  rp   r   r
  r  s           rZ   test_simple_singularz"TestSVD_GESDD.test_simple_singular  s    	9-*M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6]dad #%a%i"na8 +r\   c                    g dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        |j
                  d                t        |j
                  d   |j
                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nro   r  rr   rs   r  r  r   r   r  r   rT   rF   r@   r9   rX   r  r   rb   r  s           rZ   test_simple_underdetz"TestSVD_GESDD.test_simple_underdet  s    	"*M1M)-););=HAq"%accAgs1771:?1771:rxx{3QWW\\BE3q6]dad #%a%i"na8 +r\   c                    ddgddgddgg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        |j
                  d                t        |j                  |z  t	        d             t        |j
                  d   |j
                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )	Nr^   rN   r  rr   rp   r  r  r   r  r  s           rZ   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet  s    VaVaV$*M1M)-););=HAq"%accAgs1771:?%bddRiQ81771:rxx{3QWW\\BE3q6]dad #%a%i"na8 +r\   c           
         t         j                  j                  d      }d}d}t        d      D ]   }|j                  ||g      |j                  ||g      fD ]  }dD ]  }t	        ||| j
                        \  }}}	t        |j                  |z  t        |j                  d                t        |	|	j                  z  t        |	j                  d                t        |j                  d   |	j                  d   f|j                  j                        }
t        t        |            D ]  }||   |
||f<    t        ||
z  |	z  |         # y )	Nr  r  r   rp   r  r  r^   r   )rP   rQ   r  r   r   r  r   rT   rF   r@   r9   rX   r  rb   )rx   rf   rV   mr   ry   r	  r  r  r  r  s              rZ   test_randomzTestSVD_GESDD.test_random  s   ii##D)qAjj!Q(#**aV*<=%2M"1M151C1C EHAq"-accAgs1771:G-b244iRXXa[9IJ!1771:rxx{";QWW\\JE"3q6]&'dad +-a%i"na@ &3 > r\   c                 :   g dg dg dg}dD ]
  }t        ||| j                        \  }}}t        |j                         j                  |z  t        |j                  d                t        |j                         j                  |z  t        |j                  d                t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nro   )r^   y               @rp   rq   r  r  r^   r   )r   r  r   rS   rT   rF   r@   r9   rX   r  r   rb   r  s           rZ   r   z!TestSVD_GESDD.test_simple_complex  s    
I.*M1M)-););=HAq"%affhjj1nc!''!*oF%bggikkB&6BHHQK8HI1771:rxx{3QWW\\BE3q6]dad #%a%i"na8 +r\   c           
         t         j                  j                  d      }d}d}t        d      D ]+  }dD ]"  }|j                  ||g      |j                  ||g      fD ]  }|d|j                  t	        |j
                              z  z   }t        ||| j                        \  }}}	t        |j                         j                  |z  t        |j
                  d                t        |j
                  d   |	j
                  d	   f|j                  j                        }
t        t        |            D ]  }||   |
||f<    t        ||
z  |	z  |        % . y )
Nr  r  r   rp   r  rM   r  r^   r   )rP   rQ   r  r   listr@   r   r  r   rS   rT   rF   r9   rX   r  rb   )rx   rf   rV   r  r   r	  ry   r  r  r  r  s              rZ   test_random_complexz!TestSVD_GESDD.test_random_complex  s'   ii##D)qA!.**aV,cjj!Q.@AABszz$qww-888A"1M151C1C EHAq"-affhjj1n.1!''!*o?
 "1771:rxx{";QWW\\JE"3q6]&'dad +-a%i"na@ B "/ r\   c                 H   t         j                  j                  d      }g d}|D ]z  }t         j                  t         j                  t         j
                  t         j                  fD ]7  } |j                  | j                  |      }t        || j                         9 | y )Nr  ))r   r   )r   2   )<   r  r  )rP   rQ   r  r;   r!  r<   
complex128rR   rU   r   r  )rx   rf   sizesszr   ry   s         rZ   test_crash_1580zTestSVD_GESDD.test_crash_15801  ss    ii##D)/Bzz2::r||R]]KCHHbM((,AT%7%78 L r\   c                    g dg dg dg}t        |d| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |       y )Nro   r  rq   F)r   r  rp   r   r
  )rx   ry   r  r  r  r  r   s          rZ   r  zTestSVD_GESDD.test_check_finite:  s    
I.quD<N<NO1b!!##'3q62!"$$)SV4qwwqz288A;/>s1vAA$E!Q$K !!e)b.!4r\   c                 t    t        j                  g dg dg dg dg      }t        || j                         y )N)K}\UU?vWUU?r(  re  re  re  )re  r(  r)  r(  re  re  )re  re  r(  r)  r(  re  )re  re  re  r(  r)  r(  r  )rP   r4   r   r  )rx   r   s     rZ   test_gh_5039zTestSVD_GESDD.test_gh_5039D  s6     HH====?@
 	AT//0r\   z64-bit LAPACK requiredreasonc                     t        d       t        j                  ddgt        j                        }d|d<   t	        |d      \  }}}t        |d	   d
       t        |d   |d   z  d
       y )NihB  )free_mbr^   l        r   r  Fr	  r   r@  r   )rI   rP   r9   r;   r   r   )rx   rY   r  r  r  s        rZ   test_large_matrixzTestSVD_GESDD.test_large_matrixU  sd     	%(HHaZrzz2%q.1b!c"$"U)+S1r\   r  r   r^   rN   rV   rX   c                    t        j                  ||f|      }t        ||      }|j                  j                  }|dv r|j                         n|}t        |      \  }}	}
t        |j                  ||f       t        |j                  |       t        |	j                  |f       t        |	j                  t        j                  |             t        |
j                  ||f       t        |
j                  |       t        |d      \  }}	}
t        |j                  ||f       t        |j                  |       t        |	j                  |f       t        |	j                  t        j                  |             t        |
j                  ||f       t        |
j                  |       t        |d      }	t        |	j                  |f       t        |	j                  t        j                  |             y )Nr   FDFr/  
compute_uv)	rP   r9   minrX   r  lowerr   r   r@   )rx   r  rV   rX   ry   r  dchar
real_dcharr  r  ri   s              rZ   test_shape_dtypezTestSVD_GESDD.test_shape_dtype_  se    HHaV5)1I&+tmU[[]
a&1aQWWq!f%QWWe$QWWqd#QWWbhhz23QWWq!f%QWWe$au-1aQWWq!f%QWWe$QWWqd#QWWbhhz23QWWq!f%QWWe$e$QWWqd#QWWbhhz23r\   r   r  rV   r   r   r   c                    t        j                  d|      }t        |      \  }}}t        j                  ||f|      }t        |      \  }	}
}t	        |	t        j
                  |             t	        |
t        j                  d             t	        |t        j
                  |             |	j                  |j                  k(  sJ |j                  |j                  k(  sJ |
j                  |j                  k(  sJ t        |d      \  }	}
}t	        |	t        j                  |df             t	        |
t        j                  d             t	        |t        j                  d|f             |	j                  |j                  k(  sJ |j                  |j                  k(  sJ |
j                  |j                  k(  sJ t        |d      }
t	        |
t        j                  d             |
j                  |j                  k(  sJ y )Nrp   r   r   Fr/  r   r4  )rP   rF   r   r   r   r  rX   )rx   r   r  rV   a0u0s0r   ry   r  r  ri   s               rZ   r   zTestSVD_GESDD.test_empty|  s    VVAR W
BHHaV2&a&1a2;;q>*288D>*2;;q>*ww"(("""ww"(("""ww"(("""au-1a288QF+,288D>*288QF+,ww"(("""ww"(("""ww"(("""e$288D>*ww"(("""r\   N)r   r   r   r  r  r|   r  r  r  r  r   r  r%  r  r*  r   r   skipifrJ   slowr0  r   r  r:  ra   r   rP   r;   r   r<   r   r   r\   rZ   r  r    s*   MD
9
9	9
9A 
9A(951" [[I.FG[[2  H2 [[S),[[S),[[Wf-4 . - -44 [[TC

GR\\#RS[[Z)AB# C T#r\   r  c                       e Zd ZdZy)TestSVD_GESVDgesvdN)r   r   r   r  r   r\   rZ   rD  rD    s    Mr\   rD  rr   c                      t        j                  dt         j                        } t        t              5  t        |        d d d        y # 1 sw Y   y xY w)N)i  i  r   )rP   r   r!  r  r  r   )dfs    rZ   test_svd_gesdd_nofegfaultrH    s3     
ww}BJJ/B	z	"B 
#	"	"s   A

Ac                       e Zd Zej                  j                  deeej                  e
ej                  g      d        Zd Zd Zd Zd Zd Zd Zd	 Zej                  j(                  d
        Zy)TestSVDValsr   c                 ^   g gt        j                  d      t        j                  d      fD ]~  }t        j                  ||      }t	        |      }t        |t        j                  d             t	        t        j                  d|            }|j                  |j                  k(  r~J  y )Nr   r   rp   r   r   rN   )rP   r   r   r4   r   r   rF   rX   )rx   r   ry   r  r@  s        rZ   r   zTestSVDVals.test_empty  s|    rxx'8A"%A
ABHHQK(,-B77bhh&&& 9r\   c                     g dg dg dg}t        |      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )Nro   rq   rp   r   r^   rN   r   r   rb   rx   ry   r  s      rZ   r|   zTestSVDVals.test_simple  sK    	9-AJA!!!$!$%$%r\   c                     g dg dg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nro   r  rN   r   r^   rN  rO  s      rZ   r  z TestSVDVals.test_simple_underdet  s9    	"AJA!!!r\   c                     ddgddgddgg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nr^   rN   r  rr   rp   r   rN  rO  s      rZ   r  zTestSVDVals.test_simple_overdet  sG    VaVaV$AJA!!!r\   c                     g dg dg dg}t        |      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )Nro   )r^   r                @rq   rp   r   r^   rN   rN  rO  s      rZ   r   zTestSVDVals.test_simple_complex  sK    Y/AJA!!!$!$%$%r\   c                     g dg dg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nro   )r  y              @rs   rN   r   r^   rN  rO  s      rZ   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complex  s9    
#AJA!!!r\   c                     ddgddgddgg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nr^   rN   r  rr   rS  r   rN  rO  s      rZ   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complex  sG    VaVb!W%AJA!!!r\   c                     g dg dg dg}t        |d      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )	Nro   rq   Fr   rp   r   r^   rN   rN  rO  s      rZ   r  zTestSVDVals.test_check_finite  sN    	9-AE*A!!!$!$%$%r\   c                     t         j                  j                  d       t         j                  j                  dd      }t	        |       y )Nr  i  i
  )rP   rQ   r  rR   r   rx   ry   s     rZ   test_crash_2609zTestSVDVals.test_crash_2609  s-    
		tIINN4&
r\   N)r   r   r   r   r   r   ra   r   rP   r;   r   r<   r   r|   r  r  r   rU  rW  r  rB  r[  r   r\   rZ   rJ  rJ    sz    [[TC

GR\\#RS' T'&&& [[ r\   rJ  c                       e Zd Zd Zy)TestDiagSVDc                 H    t        t        g ddd      g dg dg dg       y )Nr^   r   r   rp   r   )r   r   r<  s    rZ   r|   zTestDiagSVD.test_simple  s     !')Q":#,i"C	Er\   N)r   r   r   r|   r   r\   rZ   r]  r]    s    Er\   r]  c                      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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. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6e7jp                  js                  d5g d6      e7jp                  js                  d7g d6      e7jp                  js                  d8d9d:g      e7jp                  js                  d;e:      d<                             Z;e7jp                  js                  d=g d>      d?        Z<d@ Z=yA)BTestQRc                     g dg dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y N   rN   rp   rN   rt   rp   rr   rp   rs   rp   r   r   rT   rF   rx   ry   qrs       rZ   r|   zTestQR.test_simple  s?    	9-!u1!!##'3q62!!a%+r\   c                     g dg dg dg}t        |      \  }}g d}t        ||d      \  }}t        ||z  |       t        ||       t        |t        d      d      \  }}t        ||       y )Nrd  rf  rg  ro   r   rp   r   r   r   rF   rx   ry   rj  rk  cqcr2s          rZ   test_simple_leftzTestQR.test_simple_left  sj    	9-!u1Q6*B!!a%,!!R(QA/B!!R(r\   c                     g dg dg dg}t        |      \  }}g d}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )Nrd  rf  rg  ro   rp   rm  rn  s          rZ   test_simple_rightzTestQR.test_simple_right  sf    	9-!u1Q"B!!a%,!!R(As1v&A!!R(r\   c                    t        j                  g dg dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )	Nrd  rf  rg  Tpivotingr^   r   rp   
rP   rC   r   r   r5   r   r   r   rT   rF   rx   ry   rj  rk  prh   q2rq  s           rZ   test_simple_pivotingzTestQR.test_simple_pivoting  s    JJ	9i89Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r\   c                     g dg dg dg}t        |d      \  }}}g d}t        ||dd      \  }}}t        ||z  |       y )Nrd  rf  rg  Trv  ro   r   r   r   r   rx   ry   rj  rk  jpvtro  rp  s          rZ   test_simple_left_pivotingz TestQR.test_simple_left_pivoting  sI    	9-D)
1d!!Q5At!!a%,r\   c                     g dg dg dg}t        |d      \  }}}g d}t        ||d      \  }}}t        ||z  |       y )Nrd  rf  rg  Trv  ro   r~  r  s          rZ   test_simple_right_pivotingz!TestQR.test_simple_right_pivoting  sG    	9-D)
1d!!Q6At!!a%,r\   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y )Nrd  rf  rN   rh  ri  s       rZ   test_simple_trapzTestQR.test_simple_trap   =    	"!u1!!##'3q62!!a%+r\   c                    t        j                  g dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )Nrd  rf  Trv  r^   r   rN   rx  ry  s           rZ   test_simple_trap_pivotingz TestQR.test_simple_trap_pivoting&  s    JJ	9-.Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r\   c                     ddgddgddgg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y Nre  rN   rt   rr   rp   rh  ri  s       rZ   test_simple_tallzTestQR.test_simple_tall1  sK    VaVaV$!u1!!##'3q62!!a%+r\   c                    t        j                  ddgddgddgg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d	 k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )
Nre  rN   rt   rr   rp   Trv  r^   r   rx  ry  s           rZ   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting8  s    JJAAA/0Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r\   c                     ddgddgddgg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d	       y )
Nre  rN   rt   rr   rp   economicmoderp   rN   rN   rN   r   r   rT   rF   r   r@   ri  s       rZ   test_simple_tall_ezTestQR.test_simple_tall_eD  sj    VaVaV$!*%1!!##'3q62!!a%+QWWf%QWWf%r\   c                    t        j                  ddgddgddgg      }t        |dd      \  }}}t        t	        |            }t        t        j                  |d	d  |d d
 k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f   d      \  }}t        ||       t        ||       y )Nre  rN   rt   rr   rp   Tr  rw  r  r^   r   r  rx  ry  s           rZ   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivotingM  s    JJAAA/0QJ71aQLqu#2'(!!##'3q62!!a%1a41AadG*-B!!R(!!R(r\   c                 D   ddgddgddgg}t        |d      \  }}ddg}t        ||d	      \  }}t        ||z  |       t        ||       t        g d
      }t        ||d	d      \  }}t        ||d d z  |       t        |t	        d      d	      \  }}t        ||       y )Nre  rN   rt   rr   rp   r  r  r^   r   r^   rN   r   Toverwrite_cr   r   r   r4   rF   rn  s          rZ   test_simple_tall_leftzTestQR.test_simple_tall_leftY  s    VaVaV$!*%1FQ6*B!!a%,!!R()Q6t<B!!ae)R0As1vv.A!"a(r\   c                     ddgddgddgg}t        |dd      \  }}}d	dg}t        ||d
d      \  }}}t        ||       t        ||z  |       t        |t	        d      d
d      \  }}}t        ||       y )Nre  rN   rt   rr   rp   r  Tr  rw  r^   r   )r   r   r   r   rF   )rx   ry   rj  rk  r  ro  rp  kpvts           rZ   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivotingf  s    VaVaV$
T:
1dF!!Q5At4&!!a%,!!SVVT:At!"a(r\   c                     ddgddgddgg}t        |d      \  }}g d}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )	Nre  rN   rt   rr   rp   r  r  ro   rm  rx   ry   rj  rk  ro  cqrq  s          rZ   test_simple_tall_rightzTestQR.test_simple_tall_rightp  su    VaVaV$!*%1Q"B!!a%,!!R(As1v&A!"a(r\   c                     ddgddgddgg}t        |dd      \  }}}g d	}t        ||d
      \  }}}t        ||z  |       t        |t        d      d
      \  }}}t        ||       y )Nre  rN   rt   rr   rp   Tr  r  ro   rv  rm  rx   ry   rj  rk  r  ro  r  s          rZ   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivotingz  sw    VaVaV$Dz:
1d!!Q6At!!a%,!!SVd;At!"a(r\   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d       y )Nre  rN   rr   rf  rN   r  rN   rp   r  ri  s       rZ   test_simple_fatzTestQR.test_simple_fat  sY    	"!u1!!##'3q62!!a%+QWWf%QWWf%r\   c                    t        j                  g dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |j                  d       t        |j                  d	       t        |d d |f         \  }}t        ||       t        ||       y )
Nr  rf  Trv  r^   r   rN   r  r  rP   rC   r   r   r5   r   r   r   rT   rF   r   r@   ry  s           rZ   test_simple_fat_pivotingzTestQR.test_simple_fat_pivoting  s    JJ	9-.Q&1aQLqu#2'(!!##'3q62!!a%1a41QWWf%QWWf%AadGB!!R(!!R(r\   c                     g dg dg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d       y )Nrd  rN   rt   rr   r  r  rN   r  r  r  ri  s       rZ   test_simple_fat_ezTestQR.test_simple_fat_e  s\    	"!*%1!!##'3q62!!a%+QWWf%QWWf%r\   c                    t        j                  g dg dg      }t        |dd      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |j                  d	       t        |j                  d
       t        |d d |f   d      \  }}t        ||       t        ||       y )Nrd  r  Tr  r  r^   r   rN   r  r  r  r  ry  s           rZ   test_simple_fat_e_pivotingz!TestQR.test_simple_fat_e_pivoting  s    JJ	9-.QJ71aQLqu#2'(!!##'3q62!!a%1a41QWWf%QWWf%AadG*-B!!R(!!R(r\   c                     g dg dg}t        |d      \  }}ddg}t        ||d      \  }}t        ||z  |       t        ||       t        |t        d      d      \  }}t        ||       y )Nrd  r  r  r  r^   rN   r   rm  rn  s          rZ   test_simple_fat_leftzTestQR.test_simple_fat_left  so    	"!*%1FQ6*B!!a%,!!R(As1vv.A!"a(r\   c                     g dg dg}t        |dd      \  }}}ddg}t        ||dd      \  }}}t        ||z  |       t        |t        d      dd      \  }}}t        ||       y )	Nrd  r  r  Tr  r^   rN   r   rm  r  s          rZ   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting  sq    	"
T:
1dF!!Q5At!!a%,!!SVVT:At!"a(r\   c                     g dg dg}t        |d      \  }}ddg}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )Nrd  r  r  r  r^   rN   rm  r  s          rZ   test_simple_fat_rightzTestQR.test_simple_fat_right  sk    	"!*%1FQ"B!!a%,!!R(As1v&A!"a(r\   c                     g dg dg}t        |dd      \  }}}ddg}t        ||d      \  }}}t        ||z  |       t        |t        d      d      \  }}}t        ||       y )	Nrd  r  Tr  r  r^   rN   rv  rm  r  s          rZ   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivoting  sm    	"Dz:
1dF!!Q6At!!a%,!!SVd;At!"a(r\   c                     g dg dg dg}t        |      \  }}t        |j                         j                  |z  t	        d             t        ||z  |       y Nrp         @      @rr   rr   rN   y       @      @rp   rN   r  rp   )r   r   rS   rT   rF   ri  s       rZ   r   zTestQR.test_simple_complex  sE    <3!u1!!&&(**q.#a&9!!a%+r\   c                     g dg dg dg}t        |      \  }}g d}t        ||d      \  }}t        ||z  |       t        |t        d      d      \  }}t        ||       y )Nr  r  r  r^   rN   r  r   rp   rm  rx   ry   rj  rk  ro  rp  s         rZ   test_simple_complex_leftzTestQR.test_simple_complex_left  s`    <3!u1Aq&)A!!a%,As1vv.A!!R(r\   c                     g dg dg dg}t        |      \  }}g d}t        ||      \  }}t        ||z  |       t        |t        d            \  }}t        ||       y )Nr  r  r  r  rp   rm  r  s         rZ   test_simple_complex_rightz TestQR.test_simple_complex_right  s\    <3!u1Aq!A!!a%,As1v&A!!R(r\   c                 D   ddgddgddgg}t        |d      \  }}d	d
g}t        ||d      \  }}t        ||z  |       t        ||       t        g d      }t        ||dd      \  }}t        ||d d z  |       t        |t	        d      d      \  }}t        ||       y )Nre  y       @      @rN   rt   y      @      @rp   r  r  r^          @       @r   r  Tr  r  rn  s          rZ   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_left  s    YAq	*!*%1IQ6*B!!a%,!!R()Q6t<B!!ae)R0As1vv.A!"a(r\   c                     g dg dg dg}t        |      \  }}g d}t        ||dd      \  }}t        |j                         |z  |       y )Nr  r  r  r  r   T	conjugater   r   r   rS   r  s         rZ   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugate  sH    <3!u1Aq&D9A!!&&(Q,3r\   c                     ddgddgddgg}t        |d      \  }}ddg}t        ||d	d
      \  }}t        |j                         |z  |       y )Nrp   r  rr   r  rN   r  r  r^   r   Tr  r  r  s         rZ   'test_simple_complex_tall_left_conjugatez.TestQR.test_simple_complex_tall_left_conjugate  s[    YD	Aq6*!*%1IAq&D9A!!&&(Q,3r\   c                     g dg dg dg}t        |      \  }}t        j                  g d      }t        ||d      \  }}t	        ||j                         z  |       y )Nr  r  r  r  Tr  )r   rP   r4   r   r   rS   r  s         rZ   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate
  sO    <3!u1HH\"AqD1A!!affh,3r\   c                    t        g dg dg dg      }t        |d      \  }}}t        t        |            }t	        t        j                  |dd  |d d k               t        |j                         j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )	Nr  r  r  Trv  r^   r   rp   )r4   r   r   r5   r   rP   r   r   rS   rT   rF   ry  s           rZ   test_simple_complex_pivotingz#TestQR.test_simple_complex_pivoting  s    <y9:Q&1aQLqu#2'(!!&&(**q.#a&9!!a%1a41AadGB!!R(!!R(r\   c                     t        g dg dg dg      }t        |d      \  }}}g d}t        ||dd      \  }}}t        ||z  |       y )Nr  r  r  Trv  r  r   r4   r   r   r   r  s          rZ   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivoting  sN    <y9:D)
1d!!Q5At!!a%,r\   c                     t        g dg dg dg      }t        |d      \  }}}g d}t        ||d      \  }}}t        ||z  |       y )Nr  r  r  Trv  r  r  r  s          rZ   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting#  sL    <y9:D)
1d!!Q6At!!a%,r\   c                 
   t         j                  j                  d      }d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr  r  rN   rP   rQ   r  r   r   r   rT   rF   rx   rf   rV   r  ry   rj  rk  s          rZ   r  zTestQR.test_random*  sl    ii##D)qA

Aq6"Aa5DAq%accAgs1v6%a!eQ/	 r\   c                 T   t         j                  j                  d      }d}t        d      D ]y  }|j                  ||g      }t	        |      \  }}|j                  |g      }t        ||d      \  }}t        ||z  |       t        |t        |      d      \  }}t        ||       { y )Nr  r  rN   r   rP   rQ   r  r   r   r   r   rF   	rx   rf   rV   r  ry   rj  rk  ro  rp  s	            rZ   test_random_leftzTestQR.test_random_left3  s    ii##D)qA

Aq6"Aa5DAq

A3A1f-EB%a!eR03q662EB%a, r\   c                 P   t         j                  j                  d      }d}t        d      D ]w  }|j                  ||g      }t	        |      \  }}|j                  |g      }t        ||      \  }}t        ||z  |       t        |t        |            \  }}t        ||       y y r  r  	rx   rf   rV   r  ry   rj  rk  ro  r  s	            rZ   test_random_rightzTestQR.test_random_right?  s    ii##D)qA

Aq6"Aa5DAq

A3A1%EB%a!eR03q6*EB%a, r\   c           	         t         j                  j                  d      }d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}}t        t        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }	}
t        ||	       t        ||
        y )Nr  r  rN   Trv  r^   r   rP   rQ   r  r   r   r   r5   r   r   r   rT   rF   rx   rf   rV   r  ry   rj  rk  rz  rh   r{  rq  s              rZ   test_random_pivotingzTestQR.test_random_pivotingK  s    ii##D)qA

Aq6"AT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a, r\   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr     r  rN   r  rx   rf   r  rV   r  ry   rj  rk  s           rZ   test_random_tallzTestQR.test_random_tallY  sq    ii##D)qA

Aq6"Aa5DAq%accAgs1v6%a!eQ/	 r\   c                 \   t         j                  j                  d      }d}d}t        d      D ]{  }|j                  ||g      }t	        |d      \  }}|j                  |g      }t        ||d      \  }	}t        ||z  |	       t        |t        |      d      \  }	}t        |	|       } y )Nr  r  r  rN   r  r  r   r  )
rx   rf   r  rV   r  ry   rj  rk  ro  rp  s
             rZ   test_random_tall_leftzTestQR.test_random_tall_leftd  s    ii##D)qA

Aq6"Aaj)DAq

A3A1f-EB%a!eR03q662EB%b!, r\   c                 X   t         j                  j                  d      }d}d}t        d      D ]y  }|j                  ||g      }t	        |d      \  }}|j                  |g      }t        ||      \  }	}t        ||z  |	       t        |t        |            \  }	}t        |	|       { y Nr  r  r  rN   r  r  r  )
rx   rf   r  rV   r  ry   rj  rk  ro  r  s
             rZ   test_random_tall_rightzTestQR.test_random_tall_rightr  s    ii##D)qA

Aq6"Aaj)DAq

A3A1%EB%a!eR03q6*EB%b!, r\   c           	         t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}}t        t        |            }	t        t        j                  |	dd  |	d d k               t        |j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }
}t        ||
       t        ||        y )	Nr  r  r  rN   Trv  r^   r   r  rx   rf   r  rV   r  ry   rj  rk  rz  rh   r{  rq  s               rZ   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s    ii##D)qA

Aq6"AT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a, r\   c                 r   t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}t        |j                  |z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y r  )
rP   rQ   r  r   r   r   rT   rF   r   r@   r  s           rZ   test_random_tall_ezTestQR.test_random_tall_e  s    ii##D)qA

Aq6"Aaj)DAq%accAgs1v6%a!eQ/1a&)1a&) r\   c           	      X   t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |dd      \  }}}t        t        |            }	t        t        j                  |	dd  |	d d	 k               t        |j                  |z  t        |             t        ||z  |d d |f          t        |j                  ||f       t        |j                  ||f       t	        |d d |f   d
      \  }
}t        ||
       t        ||        y )Nr  r  r  rN   Tr  r  r^   r   r  )rP   rQ   r  r   r   r   r5   r   r   r   rT   rF   r   r@   r  s               rZ   test_random_tall_e_pivotingz"TestQR.test_random_tall_e_pivoting  s    ii##D)qA

Aq6"AT
;GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW51a&)1a&)!Q$j1FB%a,%a, r\   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr  r  r  rN   r  r  s           rZ   test_random_trapzTestQR.test_random_trap  sq    ii##D)qA

Aq6"Aa5DAq%accAgs1v6%a!eQ/	 r\   c           	         t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}}t        t        |            }	t        t        j                  |	dd  |	d d k               t        |j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }
}t        ||
       t        ||        y )	Nr  r  r  rN   Trv  r^   r   r  r  s               rZ   test_random_trap_pivotingz TestQR.test_random_trap_pivoting  s    ii##D)qA

Aq6"AT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a, r\   c                 T   t         j                  j                  d      }d}t        d      D ]y  }|j                  ||g      d|j                  ||g      z  z   }t	        |      \  }}t        |j                         j                  |z  t        |             t        ||z  |       { y Nr  r  rN   rM   )	rP   rQ   r  r   r   r   rS   rT   rF   r  s          rZ   r  zTestQR.test_random_complex  s    ii##D)qA

Aq6"R

Aq6(:%::Aa5DAq%affhjj1nc!f=%a!eQ/	 r\   c                    t         j                  j                  d      }d}t        d      D ]  }|j                  ||g      d|j                  ||g      z  z   }t	        |      \  }}|j                  |g      d|j                  |g      z  z   }t        ||d      \  }}t        ||z  |       t        |t        |      d      \  }}t        ||        y )Nr  r  rN   rM   r   r  r  s	            rZ   test_random_complex_leftzTestQR.test_random_complex_left  s    ii##D)qA

Aq6"R

Aq6(:%::Aa5DAq

A3"SZZ_"44A1f-EB%a!eR03q662EB%a, r\   c                    t         j                  j                  d      }d}t        d      D ]  }|j                  ||g      d|j                  ||g      z  z   }t	        |      \  }}|j                  |g      d|j                  |g      z  z   }t        ||      \  }}t        ||z  |       t        |t        |            \  }}t        ||        y r  r  r  s	            rZ   test_random_complex_rightz TestQR.test_random_complex_right  s    ii##D)qA

Aq6"R

Aq6(:%::Aa5DAq

A3"SZZ_"44A1%EB%a!eR03q6*EB%a, r\   c           	      8   t         j                  j                  d      }d}t        d      D ]  }|j                  ||g      d|j                  ||g      z  z   }t	        |d      \  }}}t        t        |            }t        t        j                  |dd  |d d k               t        |j                         j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }	}
t        ||	       t        ||
        y )	Nr  r  rN   rM   Trv  r^   r   )rP   rQ   r  r   r   r   r5   r   r   r   rS   rT   rF   r  s              rZ   test_random_complex_pivotingz#TestQR.test_random_complex_pivoting  s    ii##D)qA

Aq6"R

Aq6(:%::AT*GAq!DGABFF1QR5AcrF?+,%affhjj1nc!f=%a!eQq!tW5!Q$[FB%a,%a, r\   c                     g dg dg dg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       y Nrd  rf  rg  Fr   rp   rh  ri  s       rZ   r  zTestQR.test_check_finite  sB    	9-!%(1!!##'3q62!!a%+r\   c                    g dg dg dg}t        |d       \  }}t        |d      \  }}t        ||       t        ||       t        |d      \  }}t        ||       t        ||       t        |d      \  }}	t        ||       t        |	|       t        t        t         |fdd	i       t        t        t         |fdd
i       y )Nrd  rf  rg  )lworkrp   r?  r   r  r   rN   )r   r   r  	Exception)
rx   ry   rj  rk  r{  rq  q3r3q4r4s
             rZ   
test_lworkzTestQR.test_lwork  s    	9-!4 1 AQB!"a(!"a( ARB!"a(!"a( ARB!"a(!"a( 	iaTGQ<8iaTGQ<8r\   r  r1  rV   rw  FTrX   c                 `   t        ||      }t        j                  ||f|      }t        ||      ^}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^}}	t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^\  }}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  |f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r@|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         y y )	Nr   rv  r^   r   rk  r  r  raw)	r6  rP   r9   r   r   r@   rX   rb   int32)rx   r  rV   rw  rX   r  ry   rj  rk  otherrz  r  taus                rZ   r:  zTestQR.test_shape_dtype  s   
 1IHHaV5)!h/1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+qsX6	EQWWq!f%QWWe$5z8a333BA1$'"((+!*x@1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+ "158 D
cASYYA'SYY&SYY%SYY&QWWq!f%QWWe$5z8a333BA1$'"((+ r\   r;  r<  c                    t        ||      }t        j                  ||f      }t        |      \  }}t	        |t        j
                  |             t	        |t        j                  ||f             t        |d      \  }}}t	        |t        j
                  |             t	        |t        j                  ||f             t	        |t        j                  |             t        |d      \  }t	        |t        j                  ||f             t        |d      \  }}t	        |t        j                  ||f             t	        |t        j                  ||f             t        |d      \  \  }}	}t	        |t        j                  ||f             t	        |	t        j                  |f             t	        |t        j                  ||f             y )NTrv  rk  r  r  r  )r6  rP   r   r   r   r  r:   )
rx   r  rV   r  ry   rj  rk  rz  r  r  s
             rZ   r   zTestQR.test_emptyI  sZ   1IHHaV!u12;;q>*288QF+,Q&1a2;;q>*288QF+,299Q<(_288QF+,!*%1288QF+,288QF+,15)
cARXXq!f-.RXXqd^,288QF+,r\   c                    t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             y )Nr   r   r   )rP   r   r   r   )rx   ry   ro  r  rk  s        rZ   test_multiply_emptyzTestQR.test_multiply_emptyc  s    HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-r\   N)>r   r   r   r|   rr  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r   r   r   r  r:  r   r  r   r\   rZ   ra  ra    s   ,))	)--,	),
)&
)))))&)&))))),)))444	)--0
-
--	0--- *-$0-0
-
--,90 [[S),[[S),[[Z%7[[Wf-., . 8 - -.,` [[Z)AB- C-2.r\   ra  c                   j   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ej"                  j%                  dg d      ej"                  j%                  dg d      ej"                  j%                  de      d                      Zej"                  j%                  dg d      d        Zy)TestRQc                     g dg dg dg}t        |      \  }}t        ||j                  z  t        d             t        ||z  |       y rc  r   r   rT   rF   rx   ry   rk  rj  s       rZ   r|   zTestRQ.test_simpleu  s?    	9-!u1!!acc'3q62!!a%+r\   c                 h    g dg dg dg}t        |      \  }}t        |d      }t        ||       y )Nrd  rf  rg  rk  r  )r   r   )rx   ry   rk  rj  rq  s        rZ   test_rzTestRQ.test_r{  s0    	9-!u1_!!R(r\   c                 
   t         j                  j                  d      }d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        ||j                  z  t        |             t        ||z  |       V y r  rP   rQ   r  r   r   r   rT   rF   rx   rf   rV   r  ry   rk  rj  s          rZ   r  zTestRQ.test_random  sl    ii##D)qA

Aq6"Aa5DAq%a!##gs1v6%a!eQ/	 r\   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y )Nrd  rf  rp   r  r   s       rZ   r  zTestRQ.test_simple_trap  r  r\   c                     ddgddgddgg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y r  r  r   s       rZ   r  zTestRQ.test_simple_tall  sK    VaVaV$!u1!!##'3q62!!a%+r\   c                     g dg dg}t        |      \  }}t        ||j                  z  t        d             t        ||z  |       y )Nr  rf  rp   r  r   s       rZ   r  zTestRQ.test_simple_fat  s=    	"!u1!!acc'3q62!!a%+r\   c                     g dg dg dg}t        |      \  }}t        ||j                         j                  z  t	        d             t        ||z  |       y r  )r   r   rS   rT   rF   r   s       rZ   r   zTestRQ.test_simple_complex  sE    <3!u1!!affhjj.#a&9!!a%+r\   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        ||j                  z  t        |             t        ||z  |       V y r  r$  rx   rf   r  rV   r  ry   rk  rj  s           rZ   r  zTestRQ.test_random_tall  q    ii##D)qA

Aq6"Aa5DAq%a!##gs1v6%a!eQ/	 r\   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        ||j                  z  t        |             t        ||z  |       V y r  r$  r+  s           rZ   r  zTestRQ.test_random_trap  r,  r\   c                 r   t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}t        ||j                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  r  rN   r  r  )
rP   rQ   r  r   r   r   rT   rF   r   r@   r+  s           rZ   test_random_trap_economicz TestRQ.test_random_trap_economic  s    ii##D)qA

Aq6"Aaj)DAq%a!##gs1v6%a!eQ/1a&)1a&) r\   c                 T   t         j                  j                  d      }d}t        d      D ]y  }|j                  ||g      d|j                  ||g      z  z   }t	        |      \  }}t        ||j                         j                  z  t        |             t        ||z  |       { y r  )	rP   rQ   r  r   r   r   rS   rT   rF   r%  s          rZ   r  zTestRQ.test_random_complex  s    ii##D)qA

Aq6"R

Aq6(:%::Aa5DAq%a!&&(**nc!f=%a!eQ/	 r\   c                    t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      d|j                  ||g      z  z   }t	        |d      \  }}t        ||j                         j                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  r  rN   rM   r  r  )rP   rQ   r  r   r   r   rS   rT   rF   r   r@   r+  s           rZ   test_random_complex_economicz#TestRQ.test_random_complex_economic  s    ii##D)qA

Aq6"R

Aq6(:%::Aaj)DAq%a!&&(**nc!f=%a!eQ/1a&)1a&) r\   c                     g dg dg dg}t        |d      \  }}t        ||j                  z  t        d             t        ||z  |       y r  r  r   s       rZ   r  zTestRQ.test_check_finite  sB    	9-!%(1!!acc'3q62!!a%+r\   r  r1  rV   rX   c                 p   t        ||      }t        j                  ||f|      }t        |      \  }}t	        |j
                  ||f       t	        |j
                  ||f       t	        |j                  |       t	        |j                  |       t        |d      }t	        |j
                  ||f       t	        |j                  |       t        |d      \  }}t	        |j
                  ||f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       y )Nr   rk  r  r  )r6  rP   r9   r   r   r@   rX   )rx   r  rV   rX   r  ry   rk  rj  s           rZ   r:  zTestRQ.test_shape_dtype  s     1IHHaV5)!u1QWWq!f%QWWq!f%QWWe$QWWe$qsOQWWq!f%QWWe$!*%1QWWq!f%QWWe$QWWq!f%QWWe$r\   r;  r<  c                    t        ||      }t        j                  ||f      }t        |      \  }}t	        |t        j                  ||f             t	        |t        j
                  |             t        |d      }t	        |t        j                  ||f             t        |d      \  }}t	        |t        j                  ||f             t	        |t        j                  ||f             y )Nrk  r  r  )r6  rP   r   r   r   r  )rx   r  rV   r  ry   rk  rj  s          rZ   r   zTestRQ.test_empty  s    1IHHaV!u1288QF+,2;;q>*qsO288QF+,!*%1288QF+,288QF+,r\   N)r   r   r   r|   r"  r  r  r  r  r   r  r  r/  r  r2  r  r   r   r   r  r:  r   r   r\   rZ   r  r  t  s    ,)0,,,,00
*0
*, [[S),[[S),[[Wf-% . - -%( [[Z)AB- C-r\   r  c                   p   e Zd Zd Zd Zej                  j                  dd ej                  d       d ej                  d      dgfd ej                  d      d ej                  d       dgfd	dd ej                  d       ej                  d       gfd
 ej                  d       ej                  d       ddgfd  ej                  d      d ej                  d       dgfg      d        Z
d Zd Zej                  j                  deeej                  eej"                  g      d        Zy)	TestSchurc                     t        ||z  |j                         j                  z  |||d       t        ||j                         j                  z  t        j                  t        |            z
  dd|d       y )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rS   rT   rP   rF   rb   )rx   ry   tr  r   r   s         rZ   check_schurzTestSchur.check_schur  s]    A

*ADt H	J 	AFFHJJA7 2	4r\   c           	         g dg dg dg}t        |      \  }}| j                  |||dd       t        |d      \  }}t        t        j                  t        t        |                  xr' t        j                  t        t        |                         | j                  |||dd       t        ||      \  }}| j                  |||dd       y )Nre     rp   rf  r?  rp   rs   r'  +<r   r   r   )r   r:  r   rP   r/  r=   r?   r   )rx   ry   r9  r  tczctc2zc2s           rZ   r|   zTestSchur.test_simple  s    J/Qx1Aqu59q)$BuYr]+,Mim8L1MNBU;2r?SC5u=r\   zsort, expected_diaglhprN         r_   rhpiucoucc                     | dk\  S )Nre  r   )r  s    rZ   <lambda>zTestSchur.<lambda>   s    AHr\   c                     g dg dg dg dg}t        ||      \  }}}| j                  |||dd       t        t        j                  |      |d	
       t        d|       y )Nr#  r   r@  rA  g      g      rA  r@  r        @      g      @rP  r#  rC        @rA   r'  r?  r@  -q=r   rN   )r   r:  r   rP   r5   r   )rx   rA   expected_diagry   r9  r  sdims          rZ   	test_sortzTestSchur.test_sort  sb     "! 14(
1dAqu59
M>Qr\   c                 |    g dg dg dg dg}t        t        t        |d       t        t        t        |d       y )NrM  rN  rO  rR  unsupportedrT  r^   )r  r  r   rZ  s     rZ   test_sort_errorszTestSchur.test_sort_errors.  s3    "! 	j%?j%3r\   c                     g dg dg dg}t        |d      \  }}t        ||z  |j                         j                  z  |       y )Nr<  rf  r>  Fr   )r   r   rS   rT   )rx   ry   r9  r  s       rZ   r  zTestSchur.test_check_finite6  s;    J/QU+1!!a%!&&(**"4a8r\   r   c                    t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}t	        |t        j                  d             t	        |t        j                  d             |j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ t        |d      \  }}}t	        |t        j                  d             t	        |t        j                  d             t        |d       |j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rN   rE  rT  r   )rP   r   r   rF   r   rX   r   )rx   r   ry   r9  r  t0z0rX  s           rZ   r   zTestSchur.test_empty;  s    HHV2&Qx1rvvar*+B288F+,288F+,ww"(("""ww"(("""15)
1d288F+,288F+,T1ww"(("""ww"(("""r\   N)r   r   r   r:  r|   r   r   r   rP   r>   rY  r\  r  ra   r   r;   r   r<   r   r   r\   rZ   r7  r7    s>   4> [[
72771:+tWRWWQZ5	6
'"''!*cGBGGAJ;5	6
$WRWWQZ'"''!*5	6
'"''!*wrwwqzk45	6
wrwwqz3TB	C		E

49
 [[TC

GR\\#RS# T#r\   r7  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	eeeeeg      d
        Zy)TestHessenbergc                     g dg dg dg}g dg dg dg}t        |d      \  }}t        |j                  |z  |z  |       t        ||d	
       y )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@r^   calc_qr  decimalr   r   rT   rx   ry   h1rj   rj  s        rZ   r|   zTestHessenberg.test_simpleO  sX     ..!# !A&1!!##'A+q1!!R3r\   c                     g dg dg dg}t        |d      \  }}t        |j                         j                  |z  |z  |       y )Nrd  )rf  y             f@rh  )y             ;r  rj  r^   rn  )r   r   rS   rT   rx   ry   rj   rj  s       rZ   r   z"TestHessenberg.test_simple_complexZ  sA     !A&1!!&&(**q.1"4a8r\   c                     g dg dg dg dg dg dg dg}t        |d	      \  }}t        |j                  |z  |z  |       y )
N)r^   rN   rp   r  rr   rs   r  )r   rN   rp   r  rs   r  rN   )r   rN   rN   rp   r   rp   rN   )r   r   rN   re  r   r   rN   )r   rp   r^   rN   r   r^   rN   )r   r^   rN   rp   r   r^   r   )r   r   r   r   r   r^   rN   r^   rn  rr  rv  s       rZ   test_simple2zTestHessenberg.test_simple2a  sF    """""""$ !A&1!!##'A+q1r\   c                     t        j                  d      }d|d<   t        |d      \  }}t        |j                  |z  |z  |       y )Nrp   rN   )r   r   r^   rn  )rP   rF   r   r   rT   rv  s       rZ   test_simple3zTestHessenberg.test_simple3l  s>    FF1I%!A&1!!##'A+q1r\   c                     t         j                  j                  d      }d}t        d      D ]A  }|j                  ||g      }t	        |d      \  }}t        |j                  |z  |z  |       C y )Nr  r  rN   r^   rn  )rP   rQ   r  r   r   r   rT   rx   rf   rV   r  ry   rj   rj  s          rZ   r  zTestHessenberg.test_randomr  sa    ii##D)qA

Aq6"Aa*DAq%accAgk15 r\   c                 .   t         j                  j                  d      }d}t        d      D ]f  }|j                  ||g      d|j                  ||g      z  z   }t	        |d      \  }}t        |j                         j                  |z  |z  |       h y )Nr  r  rN   rM   r^   rn  )rP   rQ   r  r   r   r   rS   rT   r|  s          rZ   r  z"TestHessenberg.test_random_complexz  s    ii##D)qA

Aq6"R

Aq6(:%::Aa*DAq%affhjj1nq&8!< r\   c                     g dg dg dg}g dg dg dg}t        |dd	      \  }}t        |j                  |z  |z  |       t        ||d
       y )Nrd  re  ri  rk  rl  rm  r^   F)ro  r   r  rp  rr  rs  s        rZ   r  z TestHessenberg.test_check_finite  sZ     ..!# !AE:1!!##'A+q1!!R3r\   c                    ddgddgg}t        |d      \  }}t        |t        j                  d             t        ||       ddgdd	gg}t        |d      \  }}t        |t        j                  d             t        ||       y )
NrN   r^   r  r=  rn  y       @      r   y      @      @y      (@       )r   r   rP   rF   )rx   ry   rj   rj  r   h2r{  s          rZ   test_2x2zTestHessenberg.test_2x2  s~    VaW!A&1!!RVVAY/!!Q'D\D%=)Aa(B!"bffQi0!"a(r\   r   c                    t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ t        |d      \  }}t        |d      \  }}|j                  dk(  sJ |j                  |j                  k(  sJ |j                  dk(  sJ |j                  |j                  k(  sJ y )Nr   r   rp   Trn  )rP   r   r   r@   rX   rF   )rx   r   ry   rj   rj  h3r  s          rZ   r   zTestHessenberg.test_empty  s    HHV2&qMww&   ww*RVVAR%89?????!D)1Ad+Bww&   ww"(("""ww&   ww"(("""r\   N)r   r   r   r|   r   rx  rz  r  r  r  r  r   r   r   ra   r   r;   r   r<   r   r   r\   rZ   rb  rb  M  s[    	49	226=	4
) [[TC)#LM# N#r\   rb  zBuild Dependenciesblasnameversionc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestQZc                 \   t         j                  j                  d      }d}|j                  ||g      j                  t              }|j                  ||g      j                  t              }t        ||      \  }}}}t        ||z  |j                  z  |d       t        ||z  |j                  z  |d       t        ||j                  z  t        |      d       t        ||j                  z  t        |      d       t        t        j                  t        |      dk\               y )N90  rr   rp  r   )rP   rQ   r  rU   r;   r   r   rT   rF   r   r   r5   	rx   rf   rV   rY   r   AABBQr  s	            rZ   test_qz_singlezTestQZ.test_qz_single  s    ii##E*JJ1v%%g.JJ1v%%g.!QxB1!!b&133,1=!!b&133,1=!!acc'3q61=!!acc'3q61=tBx1}%&r\   c                     t         j                  j                  d      }d}|j                  ||g      }|j                  ||g      }t        ||      \  }}}}t	        ||z  |j
                  z  |       t	        ||z  |j
                  z  |       t	        ||j
                  z  t        |             t	        ||j
                  z  t        |             t        t        j                  t        |      dk\               y )Nr  rr   r   
rP   rQ   r  r   r   rT   rF   r   r   r5   r  s	            rZ   test_qz_doublezTestQZ.test_qz_double  s    ii##E*JJ1vJJ1v!QxB1!!b&133,2!!b&133,2!!acc'3q62!!acc'3q62tBx1}%&r\   c                 4   t         j                  j                  d      }d}|j                  ||g      d|j                  ||g      z  z   }|j                  ||g      d|j                  ||g      z  z   }t        ||      \  }}}}t	        ||z  |j                         j                  z  |       t	        ||z  |j                         j                  z  |       t	        ||j                         j                  z  t        |             t	        ||j                         j                  z  t        |             t        t        j                  t        |      dk\               t        t        j                  t        |      j                  dk(               y )Nr  rr   rM   r   )rP   rQ   r  r   r   rS   rT   rF   r   r   r5   r   r  s	            rZ   test_qz_complexzTestQZ.test_qz_complex  s)   ii##E*JJ1vCJJ1v$6!66JJ1vCJJ1v$6!66!QxB1!!b&1668::"5q9!!b&1668::"5q9!!affhjj.#a&9!!affhjj.#a&9tBx1}%&tBx}})*+r\   c                    t         j                  j                  d      }d}|j                  ||g      d|j                  ||g      z  z   j                  t              }|j                  ||g      d|j                  ||g      z  z   j                  t              }t        ||      \  }}}}t        ||z  |j                         j                  z  |d       t        ||z  |j                         j                  z  |d       t        ||j                         j                  z  t        |      d       t        ||j                         j                  z  t        |      d       t        t        j                  t        |      dk\               t        t        j                  t        |      j                  dk(               y )Nr  rr   rM   rp  r   )rP   rQ   r  rU   r<   r   r   rS   rT   rF   r   r   r5   r   r  s	            rZ   test_qz_complex64zTestQZ.test_qz_complex64  sG   ii##E*ZZA"SZZA%7"77??	JZZA"SZZA%7"77??	J!QxB1!!b&1668::"5q!D!!b&1668::"5q!D!!affhjj.#a&!D!!affhjj.#a&!DtBx1}%&tBx}})*+r\   c                    t         j                  j                  d      }d}|j                  ||g      }|j                  ||g      }t        ||d      \  }}}}||z  |j	                         j
                  z  }	t        |	j                  |       t        |	j                  d       ||z  |j	                         j
                  z  }
t        |
j                  |       t        |
j                  d       t        ||j	                         j
                  z  t        |             t        ||j	                         j
                  z  t        |             t        t        j                  t        |      dk\               y )Nr  rr   r   )outputr   )rP   rQ   r  r   rS   rT   r   rK  r   rF   r   r   r5   )rx   rf   rV   rY   r   r  r  r  r  aabbs              rZ   test_qz_double_complexzTestQZ.test_qz_double_complex  s   ii##E*JJ1vJJ1v!Qy1B1Vaffhjj !"''1-!"''1-Vaffhjj !"''1-!"''1-!!affhjj.#a&9!!affhjj.#a&9tBx1}%&r\   c                     t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        t        t        ||d	 
       y )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r       ErS  )皙@rP        GrP  )r@  r@  rC  r@  )r@  r   g      r  )r@  r"  rQ  r@  )r  r   rQ  r#  c                     |dk(  S )Nr   r   )araibetas      rZ   rK  z,TestQZ.test_qz_double_sort.<locals>.<lambda>
	  s    bAgr\   rT  )	rP   r4   r  r  r   r   r   rT   r   )rx   rY   r   r  r  r  r  rX  s           rZ   test_qz_double_sortzTestQZ.test_qz_double_sort  sZ     HH--,,. /
 HH++++- .
 	j"a1MNr\   c                    t         j                  j                  d      }d}|j                  ||g      }|j                  ||g      }t        ||d      \  }}}}t	        ||z  |j
                  z  |       t	        ||z  |j
                  z  |       t	        ||j
                  z  t        |             t	        ||j
                  z  t        |             t        t        j                  t        |      dk\               y )Nr  rr   Fr   r   r  r  s	            rZ   r  zTestQZ.test_check_finiteU	  s    ii##E*JJ1vJJ1v!QU3B1!!b&133,2!!b&133,2!!acc'3q62!!acc'3q62tBx1}%&r\   N)
r   r   r   r  r  r  r  r  r  r  r   r\   rZ   r  r    s'    
'
',,' 5FF
'r\   r  c                   ^    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)	TestOrdQZc                 F   t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        j                  g d	g d
g dg dg      }t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        j                  d      }t        j                  ddg      }t        j                  ddg      }	|||||	g| _        |||||	g| _        y )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )rM   y333333@y              y      @      )r  r  r  rF  r  )r  r  r  rS  )r  g      :@r  rP  )r^   rN   r^   )r^   rp   r  )r^   rp   rp   )r^   rp   r  r  )r  r@  r   r   )r#  r#  r"  r&  )r&  r#  r@  r   )re  r#  r)  r&  )r)  r$  rP  r$  )r&  r&  r"  r  )r  r@  rP  rP  )r  r@  r#  r&  rN   r   r^   )rP   r4   rF   r5   rY   r   )
clsA1B1A2B2A3B3A4B4A5s
             rZ   r  zTestOrdQZ.setup_classc	  s(    XX $&%'( ) XXDDDDF G XX/...0 1
 XX}$$$& ' XX'''') * XX)''') * VVAYWWaV_ WWaV_RR$RR$r\   c           
      
   t        j                  d      5  t        | j                  | j                        D cg c]  \  }}t        |||       }}}d d d        t        |      S c c}}w # 1 sw Y   t              S xY w)Nraiser   rT  )rP   r   ziprY   r   r    tuple)rx   rA   AiBirets        rZ   	qz_decompzTestOrdQZ.qz_decomp	  se    [[W%:=dffdff:MN:MB5Rd+:MCN &Sz O &Szs   $A/A)A/)A//Bc
           	      h   t        j                  |j                   }
t        ||j                  j                         z  |
       t        |	|	j                  j                         z  |
       t        ||z  ||	z         t        ||z  ||	z         t        t        j                  |d      t        j                  |j                               t        t        j                  |d      t        j                  |j                               t        |j                  d         D ]%  }|dkD  r|||dz
  f   dk7  r||j                  d   dz
  k  r||dz   |f   dk7  r}t        |||dz   ||dz   f   |||dz   ||dz   f         \  }}|d   j                  dk  r|ddg   }|||dz    |||dz    z  }|d   j                  dk  r|ddg   }t        ||       ||   dk(  r+||   dk(  r#t        |||f   d       t        |||f   d       ||   dk(  rt        |||f   d       t        |||f   |||f   z  ||   ||   z         ( t        |      }d}t        |j                  d         D ]A  } |t        j                  ||   g      t        j                  ||   g            }|s|rJ |}C y )Nr   r   r   r^   rN   T)rP   rF   r@   r   rT   rS   r   trilr9   r   r
   r   r   r   r2   r4   )rx   rY   r   rA   r  r  alphar  r  r  Idr   evals_tmpsortfunlastsortcursorts                     rZ   checkzTestOrdQZ.check	  s   VVQWW!!acchhj."5!!acchhj."5!!b&!a%0!!b&!a%02772r?BHHRXX,>?2772r?BHHRXX,>?qwwqz"A 1u1a!e8)288A;?"r!a%(|q'8r!AE'1QU7"23R!a%1q58H5IJq 8==1$!1a&MEAa!enT!AE]2q6;;?q!f+C)%58q=T!W\ AqD1- AqD1-!W\ AqD1-'1a4AqD(958DG;KL/ #0 #4(qwwqz"Abhhaz2BHHd1gY4GHG ""{H #r\   c                     | j                  |      }t        || j                  | j                        D ]  \  }}} | j                  |||g|   y r:  )r  r  rY   r   r  )rx   rA   r  retir  r  s         rZ   	check_allzTestOrdQZ.check_all	  sH    nnT"TVVTVV4LD"bDJJr2t+d+ 5r\   c                 &    | j                  d       y )NrE  r  r<  s    rZ   test_lhpzTestOrdQZ.test_lhp	      ur\   c                 &    | j                  d       y )NrG  r  r<  s    rZ   test_rhpzTestOrdQZ.test_rhp	  r  r\   c                 &    | j                  d       y )NrH  r  r<  s    rZ   test_iuczTestOrdQZ.test_iuc	  r  r\   c                 &    | j                  d       y )NrI  r  r<  s    rZ   test_ouczTestOrdQZ.test_ouc	  r  r\   c                 ,    d }| j                  |       y )Nc                     t        j                  | t              }|dk7  }d|| <   | |   ||   z  j                  dk(  ||<   |S Nr   r   FrP   
empty_likeboolr   r  r  outnonzeros       rZ   rA   z TestOrdQZ.test_ref.<locals>.sort	  L    --.CAvG!CMgJqz1771<CLJr\   r  rx   rA   s     rZ   test_refzTestOrdQZ.test_ref	      	 	tr\   c                 ,    d }| j                  |       y )Nc                     t        j                  | t              }|dk7  }d|| <   | |   ||   z  j                  dk7  ||<   |S r  r  r  s       rZ   rA   z TestOrdQZ.test_cef.<locals>.sort	  r  r\   r  r  s     rZ   test_cefzTestOrdQZ.test_cef	  r  r\   c                 `   t        | j                  d   | j                  d   d      } | j                  | j                  d   | j                  d   dg|  t        | j                  d   | j                  d   d      } | j                  | j                  d   | j                  d   dg|  y )Nr^   rN   rE  rT  )r    rY   r   r  )rx   r  s     rZ   test_diff_input_typeszTestOrdQZ.test_diff_input_types	  s    DFF1Itvvayu5

466!9dffQi55DFF1Itvvayu5

466!9dffQi55r\   c                    t        j                  d      }t        j                  ddg      }dddgfdddgfdddgfdddgfg}t        j                  d      }t        j                  d	d
g      }dddgfdddgfdddgfdddgfg}t        j                  d      }t        j                  ddg      }ddt         j                  gfddt         j                  gfdt         j                  dgfg}	t        j                  d      }
t        j                  ddg      }ddt         j                  gfddt         j                  gfdt         j                  dgfg}t        j                  ddg      }t        j                  ddg      }ddt         j                  gfddt         j                  gfg}||||
|g}|||||g}|||	||g}t        |||      D ]  \  }}}|D ]  \  }}t        |||      \  }}}}}}|dk(  }|dk(  }t        j                  |      }t         j                  |||z  <   t         j                  || |z  <   ||    ||    z  || <   t        ||         y )NrN   r   r_   rE  rF  rG  rH  rI  y             ?y      ?      ?yٿɿ      ?      r   r^   rT  )	rP   rF   r5   r   nanr  r    r  r   )rx   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rY   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzeror  s                                 rZ   test_sort_explicitzTestOrdQZ.test_sort_explicit	  s    VVAYWWb#YdAY'aY'dAY'aY')	 VVAYWWgz*+k>:;nk:;k>:;nk:;=	
 VVAYWWaV_c266]+c266]+bffc]+-	 VVAYWWb!WdBFF^,dBFF^,bffd^,.	 WWaV_WWaXa[)a[)+	 RR RR y)Y	J!$Q8!4BI-6))*/BW*E'1eT1a!MM%(#%66%%- $&FF5&5.!!5&M$v,65&	 0!4 .7 "5r\   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r\   rZ   r  r  b	  sM    4% 4%l
,\,		6-5r\   r  c                       e Zd Zej                  j                  d      d        Zej                  j                  d        Zy)TestOrdQZWorkspaceSizerN   c                 *   t         j                  j                  d      }d}t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X y )Nr     c                     | |k  S r:  r   r  r  s     rZ   rK  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>6
      UT\r\   rK  )rA   r  c                     | |k  S r:  r   r  s     rZ   rK  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda><
  r  r\   r   )	rP   rQ   r  r;   r!  rU   r    r"  r<   )rx   rf   rU  ddtyperY   r   r  s          rZ   test_decomposez%TestOrdQZWorkspaceSize.test_decompose-
  s    ii##E*zz2::.F

Aq6"))&1A

Aq6"))&1Aa!A#%A	 / }}bll3F

Aq6"))&1A

Aq6"))&1Aa!A&(A 4r\   c                 ~   t         j                  j                  d      }d}t         j                  t         j                  t         j
                  t         j                  fD ][  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d      \  }}}}	}
}] y )Nr  r  rI  rT  )	rP   rQ   r  r;   r!  r"  r<   rU   r    )rx   rf   rU  r  rY   r   SrT   r  r  Ur0  s               rZ   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc?
  s    ii##E*zz2::r}}bllKF

Aq6"))&1A

Aq6"))&1A&+Aqu&=#Aq%q! Lr\   N)	r   r   r   r   r   	fail_slowr  rB  r  r   r\   rZ   r   r   ,
  sA    [[1( (" [[> >r\   r   c                       e Zd Zd Zy)TestDatacopiedc                 `   ddl m} t        ddgddgg      }t        |      |j	                         }|j                         } G fdd      } G fdd	      } |       } |       }|d
fd
f|df|d
f|d
f|d
ffD ].  \  }	}
t        |	      }t         |||	      |
t        |	             0 y )Nr   )_datacopiedr^   rN   rp   c                       e Zd Zd fd	Zy)-TestDatacopied.test_datacopied.<locals>.Fake1Nc                     S r:  r   )rx   rX   r~   rY   s      rZ   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__U
  s    r\   )NN)r   r   r   r  rY   s   rZ   Fake1r  T
  s    r\   r  c                   (    e Zd ZW  j                  Zy)-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r  s   rZ   Fake2r  X
  s    "#"7"7r\   r  FTr   )scipy.linalg._decompr  rH   rC   tolistr~   r   repr)rx   r  r   LM2r  r  F1F2itemstatusarrrY   s               @rZ   test_datacopiedzTestDatacopied.test_datacopiedL
  s    4QFQF#$AJHHJVVX	 		8 	8 WWZ!UaY %[2u+E{DLD&$-CS$/!%d-Dr\   N)r   r   r   r&  r   r\   rZ   r  r  J
  s    -r\   r  c                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float32)i  r   rN   r  offsetcountrX   r?  r?  Toverwrite_aN)	r:   rP   uint8
frombufferdatar;   r@   r
   rT   ry   r  s     rZ   test_aligned_mem_floatr2  e
  sM     	s"((#A 	affQcAAAGtr\   ppc64lezcrashes on ppc64ler+  c                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float64)i$  r   r  r  r(  r+  Tr,  N)	r:   rP   r.  r/  r0  r   r@   r
   rT   r1  s     rZ   test_aligned_memr5  r
  sM    
 	s"((#A 	affQc?AAGtr\   c                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z>Check that complex objects don't need to be completely alignediH  r   re  r  r(  r+  Tr,  N)	r9   rP   r.  r/  r0  r   r@   r
   rT   r1  s     rZ   test_aligned_mem_complexr7  
  sM     	d"((#A 	affQcAAAGtr\   c                 l   t        |      }t        t        |            D ]  }|d d  }t        ||   t        j
                        s't	        j                  ||   j                  ||   j                  j                  z  dz   t        j                        }t	        j                  |j                  d||   j                  ||   j                        }||   j                  |_        ||   |d<   |||<    | |i | t        ||   j                        dkD  s||   j                  ||<    | |i |  y )Nre  r   r  r(  .r^   )r  r   rb   r`   rP   rE   r9   r   rX   itemsizer.  r/  r0  r@   rT   )funcrX  kwargsr   ry   r  s         rZ   check_lapack_misalignedr<  
  s    :D3t9GadBJJ'!A$))AaDJJ$7$779JBrwwq!		%&qTZZ1BtzzBHdBsGAaD!v1Q4::"tvv!a"6" r\   z0Ticket #1152, triggers a segfault in rare cases.)runr,  c                     t        j                  dt              } t        j                  d      }d|_        t        j                  dt         j
                        }t        j                  |j                  ddt              }d|_        t        j                  d      }t        |      \  }}t        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        ||f|ft        d
      ft        ||ft        dd      ft         | ft        d	      ft         |ft        d	      ft         |ft        d	      ft"        |ft               ft"        |ft        d	      ft$        | ft        d	      ft&        |ft        d	      ft(        |ft        d	      ft*        |ft        d	      ft,        |ft        d	      ffD ]  \  }}}t/        |||        y )Nr?  r   r  r+  i N  r  r(  Tr,  )overwrite_b)r-  r?  )rP   rF   r   r:   r@   r.  r/  r0  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   r<  )	r   Rr
  r   LUpivr:  rX  r;  s	            rZ   test_lapack_misalignedrD  
  s    	rA
		#AAG
		%rxx(A
affQc?AAG
AlGB1$./qdDT23!t-.dt45S	1~t'=>QFDTtDE1$./1$./1$./qdDF#qdDT23tTd34!t-.!t-.!t56QD$401!!tV$ 	 dF3%!r\   c                   l    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y)TestOverwritec                 J    t        t        dg       t        t        ddg       y Nr   )rG   r
   r<  s    rZ   test_eigzTestOverwrite.test_eig
  s    C&*C&&!12r\   c                 J    t        t        dg       t        t        ddg       y rH  )rG   r   r<  s    rZ   	test_eighzTestOverwrite.test_eigh
  s    D6(+D66"23r\   c                 &    t        t        dg       y Nr  )rG   r   r<  s    rZ   r  zTestOverwrite.test_eig_banded
      J1r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_eigvalszTestOverwrite.test_eigvals
      GfX.r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_eigvalshzTestOverwrite.test_eigvalsh
  s    Hvh/r\   c                 &    t        t        dg       y rM  )rG   r   r<  s    rZ   r  z!TestOverwrite.test_eigvals_banded
  s    NVH5r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_hessenbergzTestOverwrite.test_hessenberg
  rN  r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_lu_factorzTestOverwrite.test_lu_factor
  s    Ix0r\   c                 x    t        j                  g dg dg dg      }t        |      t        fddg       y )Nro   r  )r  re  re  c                     t        |       S r:  )r   )r   xlus    rZ   rK  z-TestOverwrite.test_lu_solve.<locals>.<lambda>
  s    hsA&6r\   )rp   )rP   r4   r   rG   )rx   r  r[  s     @rZ   test_lu_solvezTestOverwrite.test_lu_solve
  s.    HHiI67l6?r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_luzTestOverwrite.test_lu
      B)r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_qrzTestOverwrite.test_qr
  r_  r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_rqzTestOverwrite.test_rq
  r_  r\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   
test_schurzTestOverwrite.test_schur
  s    EF8,r\   c                 `    t        d dgt        j                  t        j                  g       y )Nc                     t        | d      S )Nr   )r   ry   s    rZ   rK  z2TestOverwrite.test_schur_complex.<locals>.<lambda>
  s    eAy&9r\   r   )dtypes)rG   rP   r;   r!  r<  s    rZ   test_schur_complexz TestOverwrite.test_schur_complex
  s!    9F8$&JJ

#;	=r\   c                 B    t        t        dg       t        d dg       y )Nr   c                     t        | d      S )NrE  r  )r   rh  s    rZ   rK  z(TestOverwrite.test_svd.<locals>.<lambda>
  s    c!7&Cr\   )rG   r   r<  s    rZ   test_svdzTestOverwrite.test_svd
  s    C&*CfXNr\   c                 &    t        t        dg       y rH  )rG   r   r<  s    rZ   test_svdvalszTestOverwrite.test_svdvals
  rQ  r\   N)r   r   r   rI  rK  r  rP  rS  r  rV  rX  r\  r^  ra  rc  re  rj  rm  ro  r   r\   rZ   rF  rF  
  sT    342/0621@
***-=O/r\   rF  c                    t        j                  | dft              j                  |      }t        j                  |      j
                  }d|z  }t        |      }t        |j                  | df       t        ||j                         |       t        |j                        }t        |j                  d       t        ||j                         |       | dkD  r|st         j                  j                  d       t         j                  j                  | d      t         j                  j                  d|       z  }|dt         j                  j                  | d      z  t         j                  j                  d|       z  z   }|j                  |      }t        |d	
      }t        |j                  | df       t        |d
      }t        |j                  | df       y y y )NrN   r   r  r^   r(  rN   r^   rr   -C6?MbP?rcondư>rs   )rP   r   r   rU   r  r  r   r   r@   r   meanrT   rQ   r  rR   )rV   rX   skip_bigXr  r   Ys          rZ   _check_orthr{  
  sZ   
Ae$++E2A
((5/

C
*CQA1a&!Aqvvxc*QSS	A&!Aqvvxc*1uX
		qIINN1a 299>>!Q#77ryy~~a++biinnQ.BBBHHUO$QWWq!f%$QWWq%j) ur\   re  z"test only on 64-bit, else too slowc                  |    d} 	 t        | t        j                  d       y # t        $ r}t	        d      |d }~ww xY w)Ni T)rx  z.memory error perhaps caused by orth regression)r{  rP   r!  MemoryErrorAssertionError)rV   r  s     rZ   test_orth_memory_efficiencyr    sA     	AArzzD1 <
	s   ! 	;6;c                      t         j                  t         j                  t         j                  t         j                  g} g d}t        j                  | |      D ]  \  }}t        ||        y )Nr^   rN   rp   r?  r  )rP   r;   r!  r<   r"  	itertoolsproductr{  )ri  r#  r   rV   s       rZ   	test_orthr  '  sJ    jj"**bllBMMBFE""651AAr 2r\   r   c                     t        j                  d|       }t        j                  d|       }t        |      }|j                  t        |      j                  k(  sJ |j
                  dk(  sJ y Nr   r   rN   )rP   r   rF   r   rX   r@   )r   ry   r>  oas       rZ   test_orth_emptyr  -  sW    
r"A		B	aB88tBx~~%%%88vr\   c                  ^   t         j                  j                  d       t         j                  t         j                  t         j
                  t         j                  g} g d}t        j                  | |      D ]2  \  }}t        j                  d|f|      }t        j                  |      j                  }d|z  }t        |      }t        |j                  ||dz
  f       t        ||z  d|       t        |j                         }t        |j                  d       t        |j                   |z  d|       t         j                  j#                  d|dz  z   |      }t        |      }t        |j                  ||dz
  |dz  z
  f       t        ||z  d|       |d	kD  s+t         j                  j                  d       t         j                  j%                  |d	      t         j                  j%                  d	|      z  }|d
t         j                  j%                  |d      z  t         j                  j%                  d|      z  z   }|j'                  |      }t        |d      }t        |j                  ||d	z
  f       t        |d      }t        |j                  ||dz
  f       5 y )Nr^   r  rN   r   r  r   r(  rq  rr   rr  rs  rt  rv  rs   )rP   rQ   r  r;   r!  r<   r"  r  r  r   r  r  r%   r   r@   r   rT   randnrR   rU   )ri  r#  r   rV   ry  r  r   rz  s           rZ   test_null_spacer  7  s   IINN1jj"**bllBMMBFE""651AGGQF"%hhrlSjqMQWWq!A#h'Aqs+qssOQWWf%a-IIOOA1Ha(qMQWWq!a%!Q$,/0Aqs+q5IINN1		q!$ryy~~a';;AD299>>!Q//"))..A2FFFAA1D)A1a!e*-1D)A1a!e*-; 2r\   c                     t        j                  d|       }t        j                  d|       }t        |      }|j                  dk(  sJ |j
                  t        |      j
                  k(  sJ y r  )rP   r   rF   r%   r@   rX   )r   ry   r>  nsas       rZ   test_null_space_emptyr  ]  sY    
r"A		B
Q-C9999
2,,,,,r\   c            	      B   t        dt              } | d d d df   }| d d dd f   }t        t        ||      t        j
                  dz  gdz  d       t        t        ||      t        j
                  dz  gdz  d       ||fD ]:  }t        t        ||      t	        j                  |j                  d         d       < t	        j                  g dg dg d	g d
g      }d}t        t        |d d d df   |d d dd f         d   |d       t        t        |d d dd f   |d d d df         d   |d       d}t        t        |d d d df   |d d dgf         |d       t        t        |d d dgf   |d d d df         |d       d}t        t        |d d d df   |d d dgf         |d       t        t        |d d dgf   |d d d df         |d       d}t        t        |d d d df   |d d dd f         |dgd       t        t        t        |d   |       t        t        t        ||d          t        t        t        |d d |       t	        j                  g dg dg dg dg dg      }t	        j                  g dg dg dg dg dg      }t	        j                  t        j
                  dz  ddg      }t        t        ||      |d       dgdgg}ddgddgg}t        t        ||      dd       t        t        ||      dd       t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             y ) Nre  rp   r"  r'  r(  r^   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rN   r   rU  rV  gL0?gĹ-?gyv?r   r_  )r   r^   r   )r   r   r^   r   rD  r  re  r   r   r   r   rL  )r"   r   r   r!   rP   pir9   r@   r4   r  r  r   )HrY   r   r  r  ry   r   s          rZ   test_subspace_anglesr  g  s   EA	!RaR%A	!QR%AOAq)BEEBJ<!+;%HOAq)BEEBJ<!+;%HV1-rxx
/C"	$ 
 		U	W	X	V	X	YA
 !HOAa!eHa12h7:H OAaeHa2A2h7:H  HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHa12h7(A  *oqtQ7*oq!A$7*oq"vq9 	)	 	A
 	)	 	A
 xxq!Q(HOAq)8%@
 A3A
!q!fAOAq)2E:OAq)2E: 	A
AOAq)288D>:
A
AOAq)288D>:
A
AOAq)288D>:r\   c                   `    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y)TestCDF2RDFc                 0    t        j                  d||      S )Nz...ij,...jk->...ik)rP   einsum)rx   ry   r   s      rZ   matmulzTestCDF2RDF.matmul  s    yy-q!44r\   c                 \    t        | j                  ||      | j                  ||             y r:  )r   r  )rx   rz   ri   r  s       rZ   assert_eig_validzTestCDF2RDF.assert_eig_valid  s&    !KK1KK1	
r\   c                     t        j                  d      }t        j                  d      t        j                  d      }}t        ||      \  }}| j                  |||       y )Nr   r   )rP   r   r&   r  rx   ry  rz   ri   wrr   s         rZ   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0real  sK    HHVxx{BHHV,1ABb"a(r\   c                     t        j                  ddgddgg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nr^   rN   rp   r   rP   r4   r7   r
   r&   r  r  s         rZ   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_real  sT    HHq!fq"g&'yy}}Q1ABb"a(r\   c                     t        j                  ddgddgg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nr^   rN   r   r  r  s         rZ   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complex  sT    HHq!fr1g&'yy}}Q1ABb"a(r\   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nro   rq   r  r  s         rZ   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_real  sN    HHiI67yy}}Q1ABb"a(r\   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y Nro   )r   r  rr   )r   r  r  r  r  s         rZ   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex  sN    HHiJ78yy}}Q1ABb"a(r\   c                 .   t        dd      D ]  }t        j                  j                  d       t        j                  j	                  d||      }t        j
                  j                  |      \  }}t        ||      \  }}| j                  |||        y )Nr^   r  iɚ;r  )	r   rP   rQ   r  rR   r7   r
   r&   r  rx   r   ry  rz   ri   r  r   s          rZ   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arrays  so    q!AIINN9%		sAq)A99==#DAqQ]FB!!"b!, r\   c                     t        dd      D ]h  }t        j                  j                  dd||      }t        j                  j                  |      \  }}t        ||      \  }}| j                  |||       j y )Nr^   r  r?  )r   rP   rQ   rR   r7   r
   r&   r  r  s          rZ   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays  sa    q!A		r2q!,A99==#DAqQ]FB!!"b!,	 r\   c                     t        j                  d      t        j                  d      }}t        t        t
        ||       y )Nr   )rN   )rP   r   r4   r  r  r&   rx   rz   ri   s      rZ   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error  s)    xx|RXXd^1j'1a0r\   c                     t        j                  d      t        j                  d      j                  dd      }}t        t        t
        ||       y )Nrp   rs   rN   rP   r:   r  r  r  r&   r  s      rZ   r  z!TestCDF2RDF.test_not_square_error  s6    yy|RYYq\11!Q71j'1a0r\   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        t
        t        ||       y r  rP   r4   r7   r
   r  r  r&   rx   ry  rz   ri   s       rZ   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error  s;    HHiJ78yy}}Q1j'1a0r\   c                     t        j                  d      t        j                  d      j                  dd      }}t        t        t
        ||       y )Nrp   r   r  r  r  s      rZ   test_non_associated_errorz%TestCDF2RDF.test_non_associated_error  s6    yy|RYYr]221a81j'1a0r\   c                 r   t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        t
        t        ||       t        j                  g dg dg dgg dg dg dgg      }t         j                  j                  |      \  }}t	        t
        t        ||       y )Nro   r   )rN   rr   y      @      r  r  s       rZ   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairs  s    HHiL9:yy}}Q1j'1a0 HH	<0	<0
  yy}}Q1j'1a0r\   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r\   rZ   r  r    sH    5
)))))--11
11
1r\   r  )F)r  platformnumpyrP   numpy.testingr   r   r   r   r   r   r   r	   r  scipy.linalgr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   scipy.linalg.lapackr(   r)   r*   r+   r,   r-   r.   r/   r0   scipy.linalg._miscr1   scipy.linalg._decomp_qzr2   scipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   scipy.linalg._testutilsrG   scipy.sparse._sputilsrH   scipy._lib._testutilsrI   scipy.linalg.blasrJ   scipy.__config__rK   ImportErrorr   r[   r!  REAL_DTYPESr"  rO   r  rk   rm   r   r8  r  r  r  rD  r   r  rH  rJ  r]  ra  r  r7  rb  blas_providerblas_versionr  r  r   r  r2  rA  machiner5  r7  r<  xfailrD  rF  r{  rB  rX   intpr9  r  r  r   ra   r   r  r  r  r  r  r   r\   rZ   <module>r     s     5 5  *N N N N N N N NA A A $ 4 #; ; ; ; ; ; 8 ( 3 ''
 (-E  zz2::&,,.	~	%
4'= '=TO& O&ff$ f$P	~! ~!BJ$ J$XM# M#^M  q ; ;|E EE
. E
.PN- N-bE# E#PY# Y#x  $ #	/08@M./7	BLp' p'fG5 G5T> ><- -6
 $H$$&)3/  1
1
#$ uL  N4N4@5/ 5/p*6 HBHHRWW%..2?  AA  UBJJNO P#.L UBJJNO- P-B;J[1 [1O\  Fs   M   M+*M+