
    xf                       d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dl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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d d	lm>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d d
lQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ 	 d dl\m]Z] de_fdZ`ej                  ej                  gZbej                  ej                  gZdebedz   ZedOdZfd Zg G d d      Zh G d d      Zi G d d      Zj G d d      Zk G d d      Zl G d d      Zm G d  d!em      Zn G d" d#      Zo G d$ d%      Zp G d& d'      Zq G d( d)      Zr G d* d+      Zs G d, d-      ZtdxZuZve]e]d.   d/   d0   Zue]d.   d/   d1   Zv G d2 d3      Zw G d4 d5      Zx G d6 d7      Zy G d8 d9      Zzd: Z{ej                  j                   ej                         d;k(  d<=      d>        Zd? Zd@ Zej                  j                  ddAB      dC        Z G dD dE      ZdPdFZej                  j                  ej                  j                   ej                  ej                        j                  dGk  dH=      dI               ZdJ ZdK ZdL Z G dM dN      Zy# e^$ r dZ]Y w xY w)Q    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)seedrandom)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nprH   randconjTr>   rF   astype)nposdefdtypeAs       @/usr/lib/python3/dist-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr\   ,   s    IINN1a 299>>!Q#7#<<^QIINN1a WaK	T!A#Yrvvay  88E?    c                    t        j                  |       }t        j                  |      r.t        |j                        dt        |j
                        z  z   S t        j                  |j                        j                  }t        j                  |      \  }}d||z
  z  }||z  }t        j                  ||       ||z  }t        j                  ||      S )zCClears trailing `fuss_binary_bits` of mantissa of a floating numberrO          @)out)rR   
asanyarrayiscomplexobj
clear_fussrealimagfinforY   nmantfrexprintldexp)arfuss_binary_bitsxsignificant_binary_bitsx_mantx_expfs          r[   rc   rc   @   s    
bA	q!&&!BAFF);$;;; hhqww/55HHQKMFE%(889A
aKFGGF
aKF88FE""r]   c                 x   t        | t              r| }t        |      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'.
    rP      r   zinput type not supported.      ?)
isinstanceintrH   rE   lenr@   	TypeErrorr3   rvsrU   rT   r5   )dim_or_eigvdimdvhs        r[   symrandr   R   s     +s#3KMA
['
*
k
 A
%"344A	
T!Wq AQSSUAHr]   c                   $    e Zd Zd Zd Zd Z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rs   rP      rP         	   ]   rP   r   r   r>   r   selfawexact_ws       r[   test_simplezTestEigVals.test_simplen   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 )Nr   r   r|   r   r   rP   r   )r4   rU   copyr   r>   r   r   s       r[   test_simple_trzTestEigVals.test_simple_trt   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 )Nr   rP   r   y      @      ?y      "@      ?y      W@      @rP   r   r   r   s       r[   test_simple_complexzTestEigVals.test_simple_complex|   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 )	Nr   r   Fcheck_finiter   r   rP   r   r   r   s       r[   test_finitezTestEigVals.test_finite   sH    	9-AE*d2hJ>1qbz1n5!!W-r]   N)__name__
__module____qualname__r   r   r   r    r]   r[   r   r   l   s    ....r]   r   c                       e Zd Zd Zd Zd Zd Zd Zej                  j                  d      d        Zd	 Zd
 Zd Zd Zd Z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 )Nr   r   r   r   rP   r   rs   r         @r   r   r   r   rs   r   rP   leftright)r4   r
   r>   r1   r   rB   rangerU   	r   r   r   r}   r   v0v1v2is	            r[   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%a!AqD'k1Q4!Q$<@	A11A&1q 	CA%accAadGmQqT!AqD'\B	C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 )Nrs   rP   r         ?       @y      ?       )r4   r
   r   r   rT   rU   r   r   r   vlvrr   s         r[   test_simple_complex_eigzTestEig.test_simple_complex_eig   s    Aq6B7#$+	2r!!UD$<%89q 	CA%a"QT(lAaDAqDMB	C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 )Nr   r   rs   r   r   )r4   r
   r   r   rT   rU   r   s         r[   r   zTestEig.test_simple_complex   s    9i67+	2rq 	CA%a"QT(lAaDAqDMB	C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 )Nrs   r   Thomogeneous_eigvals)rs   r   r   )r
   r   r   r   rR   inf)r   r   br   r   s        r[   test_gh_3054zTestEig.test_gh_3054   su    SESEAqd32$#$1AAq	2QAr]   c           	         |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   dd|       " |&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dd|       A |t        |         }|t        |         }t!        t#        |            }t!        t#        |            }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   rs   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rC   rR   rF   r@   r
   r   r   r   lexsortemptyrw   r1   onessizeallrD   r8   rc   rA   )r   rZ   BB0msgr   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_fins                      r[   _check_gen_eigzTestEig._check_gen_eig   s7   =1:wqzqAB
AB A1%r! Art42Q52v!Q$2v!Q$tzz!}% 	AADAJQT
!&UCA	A :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|$ 	EAvvhs1a4y)*AqD	1%*E	E
 (1+HRL!z%()
6*+$E!c	; #b'"s2w 	'AR1XF1I	' 4cB 	R$qQ'8"9:r]   zSee gh-2254reasonc                     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        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   )r4   rR   errstater   r   rZ   r   s      r[   test_singularzTestEig.test_singular  su     '''''	) *
 '''''	) * [[X& 	&1%	& 	& 	&s   A''A0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)rs   r   r   )rP   r   r   )r   rP   r   )r   r   rP   )rs   r   r   )r   rs   r   r   r   r   r   r   r   r   r   )r5   r4   r9   rF   rR   blockr   r   )r   MKDZI3rZ   r   s           r[   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 )	NrP   )rs   r   r   r   )r   rs   r   r   r   )r   r   rs   r   )r   r   r   rs   rs   r   )omegac1c2rZ   r   s        r[   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  )rR   r   r   r   )r   r  krZ   r   s        r[   test_bad_geneigzTestEig.test_bad_geneig!  sc    	 [[X& 	*3Z *ad3h/1##Aq)*	* 	* 	*s   5AA"c                 >   t        d       t        d      }| j                  |d        t        d      }| j                  ||       t        d      dt        d      z  z   }| j                  |d        t        d      dt        d      z  z   }| j                  ||       y )N  r   r  rO   )rG   r   r   rH   r   s      r[   test_make_eigvalszTestEig.test_make_eigvals8  s    T
AJAt$AJAq!6NRv..At$6NRv..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 )Nr   r   Fr   r   r   rP   r   rs   r   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            r[   test_check_finitezTestEig.test_check_finiteF  sY   	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%a!AqD'k1Q4!Q$<@	Ar]   c                 x    t        j                  d      j                  dd      }t        t        t
        |       y)z:Check that passing a non-square array raises a ValueError.r   r   rP   N)rR   r:   reshapeassert_raises
ValueErrorr
   r   rZ   s     r[   test_not_square_errorzTestEig.test_not_square_errorW  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.rP         "@r   N)rF   rR   r:   r  r  r  r
   r   s      r[   test_shape_mismatchzTestEig.test_shape_mismatch\  sC     FIIcN""1a(j#q!,j#q!,r]   N)r   r   r   r   r   r   r   r   pytestmarkxfailr   r  r  r  r  r  r!  r   r]   r[   r   r      sc    C(<<
@;D [[m,& -&"&*."A"*
-r]   r   c                   Z    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y)TestEigBandedc                 $    | j                          y N)create_bandmatr   s    r[   setup_methodzTestEigBanded.setup_methodf  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`.
   rP         ?rs         r   g       r   rO         r_   NrY   r         ?      ?)KLKUr5   r6   sym_matherm_matreal_matcomp_matr7   r
   rd   r8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr:   r   bc)r   NewevargsLDABr   s          r[   r)  zTestEigBanded.create_bandmati  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 	FA.24<<.CDT!VAXqs]+/3DMM1/EDd1fQh!m,	F y477"Q&!4)59*.t}}*=!DGG)Q,'tww 	CA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45		C "4)7;*.t}}*=!DGG)Q,'tww 	CA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45		C 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.rs   	compute_vN)r,   r>  r8   r   rA   r9  absr:  r   r   evecinfoevec_s        r[   
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.rs   rJ  N)r-   r>  r8   r   rA   r9  rL  r:  rM  s        r[   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.        rs   rP   rK  r   N)
r@   r5  r.   r>  r8   r   rA   r9  rL  r:  r   rD  r   rN  numifailrO  rP  s           r[   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.rs   rJ  N)r/   r@  r8   r   rA   r;  rL  r<  rM  s        r[   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.rU  rs   rP   rV  N)
r@   r6  r0   r@  r8   r   rA   r;  rL  r<  rW  s           r[   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.rP   r   r   selectselect_rangers   h㈵>r}   Fr   N)
r   r>  rd   r   rA   r9  r@  r;  rR   longlong)r   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              r[   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. NrP   r   r   r`  rs   rc  r}   Fr   )r   r>  r8   rd   r   rA   r9  rL  r:  r@  r;  r<  )r   re  evec_sym	evec_sym_rf  	evec_herm
evec_herm_rg  rh  ri  evec_sym_indrj  evec_herm_indrk  rl  rm  evec_sym_valrn  evec_herm_vals                      r[   test_eig_bandedzTestEigBanded.test_eig_banded  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.rP   Nrs   r   	permute_l)
r@   r7  r(   rA  r3  r4  r5   r   r   r   r   r  rD  lu_symm_bandipivrO  ur   p_linl_linu_lins              r[   test_dgbtrfzTestEigBanded.test_dgbtrfL       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.rP   Nrs   r   r{  )
r@   r8  r*   rB  r3  r4  r5   r   r   r   r}  s              r[   test_zgbtrfzTestEigBanded.test_zgbtrfZ  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(   rA  r3  r4  r)   r   r7   r   r7  r   r   r~  r  rO  yy_lins         r[   test_dgbtrszTestEigBanded.test_dgbtrsh  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*   rB  r3  r4  r+   rC  r7   r   r8  r   r  s         r[   test_zgbtrszTestEigBanded.test_zgbtrsr  sk     $*$*;*;TWWdgg#N dDtww$G4T]]DGG4!!U+r]   N)r   r   r   r+  r)  rQ  rS  rZ  r\  r^  ro  ry  r  r  r  r  r   r]   r[   r&  r&  e  sM    M$bFF	FG	G(?T8Jt,,,,r]   r&  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestEigTridiagonalc                 $    | j                          y r(  )create_trimatr*  s    r[   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.  rs   r/  r   N)r6   r|   er5   full_matr7   r
   rd   r8   r   rN  )r   rD  rE  rF  rG  s        r[   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   rO   r.  lapack_driverfoor   r   r   r`  )r  r  r#   r|   r  rx   r*  s    r[   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  ra  rb  r  r  r  r   rs   ra  rb  r  rP   r   rc  r}   N)	r#   r|   r  r   rA   r   r  r  rw   )	r   driverr   w_indrg  rh  rk  rl  w_vals	            r[   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  sy    B 	7F$TVVTVV6JA%d1gtvv6	7 ( 	/F*&:DFFDFF(.s'-/	/ 1 	HF(s!S[]9K$&E &d5k466: DD(s$$&E &d5k466$tAv3FG ffTlV+GffTlV+G(s'79K$&E &d5k466$tAv3FG+	Hr]   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   rs   r  rP   r   rc  r}   )r  r  r$   r|   r  r8   r   rA   r   rL  rN  rw   )	r   r  r   rN  rP  rg  rh  rk  rl  s	            r[   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s2    	j"2DFFDFF$+	-8 	BF&tvvtvvVLGAtGAJ'E%d1gtvv6%c%j#dii.A		B 	j"2DFFDFF$*3V	M0 	FF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	Fr]   N)r   r   r   r+  r  r  r  r  r   r]   r[   r  r  }  s     8 HD(F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      e	j                  j                  dd      d               Zd Ze	j                  j                  deeg      d        Zd Zy)TestEighc                     t        d       y Nr  rG   r*  s    r[   setup_classzTestEigh.setup_class  	    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        j
                  j                         5 }|j                  t        d       t        t        t        t        j                  ddg      t        j                  ddg      ddgddg       d d d        t        t        t        t        j                  ddg      t        j                  ddg      d	dg
       t        j
                  j                         5 }|j                  t        d       t        t        t        t        j                  ddg      t        j                  ddg      d	dg       d d d        t        t        t        t        j                  ddg      t        j                  ddg      ddg
       t        j
                  j                         5 }|j                  t        d       t        t        t        t        j                  ddg      t        j                  ddg      ddg       d d d        t        t        t        t        j                  ddg      t        j                  ddg      dd	g
       t        j
                  j                         5 }|j                  t        d       t        t        t        t        j                  ddg      t        j                  ddg      dd	g
       d d d        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d       t        t        t        t        j                  ddg      t        j                  ddg      dddgd       t        j
                  j                         5 }|j                  t        d       t        t        t        t        j                  ddg      t        j                  ddg      dddgd       d d d        y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrs   rP   r      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)r  r   r   r  r   r   r  wrongr  gvxevrF)r  turbogvd)r  r  r  z 'eigh' keyword argument 'eigvals)	r  r  r   rR   r   testingsuppress_warningsfilterDeprecationWarning)r   sups     r[   test_wrong_inputszTestEigh.test_wrong_inputs  sA   j$A8j$A!QIj$A!QIj$A!Q	 	j$A!Q'(!fq!f	FZZ))+ 	BsJJ)+FG*dBGGQFORWWaV_+,a&1a&B	B
 	j$A!Q'(!f	.ZZ))+ 	*sJJ)+FG*dBGGQFORWWaV_#$a&*	*
 	j$A!Q')1g	/ZZ))+ 	+sJJ)+FG*dBGGQFORWWaV_#%q'+	+
 	j$A!Q'(!f	.ZZ))+ 	2sJJ)+FG*dBGGQFORWWaV_+,a&2	2
 	j$A!Q'(!f	. 	j$AHj$AeLj$A!Q"%	1 	j$A!Q"QF%	IZZ))+ 	MsJJ)+MN*dBGGQFORWWaV_!&AeM	M 	MM	B 	B	* 	*	+ 	+	2 	2"	M 	MsA   AV1AV>AW$AWAW%1V;>WWW"%W.c           	          t        t        t        t        j                  ddg      t        j                  ddg             y )Nr   )r  r'   r   rR   r   r*  s    r[   test_nonpositive_bzTestEigh.test_nonpositive_b(  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   r1  r   rP   r  rs   T)rX   rY   )	enumerateDTYPESr\   r   r   r@   rw   r   )r   inddtr   r   r}   r   s          r[   test_value_subsetszTestEigh.test_value_subsets,  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 )Nrs   rP      r   r   )r4   r   )r   r   r   r   zs        r[   test_eigh_integerzTestEigh.test_eigh_integer9  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   rP   )	scipy.sparsesparseidentitytocscrR   
atleast_2dr  r  r   )r   scipyr   r   s       r[   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse?  sH    LL!!!$**,MM!j$*j$*r]   dtype_r  )rF  evdr  evxc                     t        d|      }t        ||      \  }}t        ||z  ||z  z
  ddt        j                  |      j
                  z  d       y )Nr  )rW   rY   r  rU    r   r   )r\   r   r   rR   rf   eps)r   r  r  r   r   r}   s         r[   test_various_drivers_standardz&TestEigh.test_various_drivers_standardG  sR     %r8Af%1AQ!"((6"2"6"66	!r]   r  r   )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rX   )r   r   r  r  rs   rU  r  rP   )rR   spacingr\   r   r   )r   r  r  r   r   r   r   r}   s           r[    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalizedP  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 )
Nr   rs   rP   r  )rs   333333??      ?rP   gffffff?r  r  r  )r\   r   r   rw   r   rR   r5   r4   )r   r   r   w2r   w3s         r[   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]   methodc                 <   t        j                  t        d      5   |t        j                  d      d       d d d        t        j                  t        d      5   |t        j                  d      ddg	       d d d        y # 1 sw Y   MxY w# 1 sw Y   y xY w)
NKeyword argument 'turbo')matchrP   rP   Tr  Keyword argument 'eigvals'r   rs   r  )r"  warnsr  rR   r9   )r   r  s     r[   test_deprecation_warningsz"TestEigh.test_deprecation_warningsl  s    \\, :< 	1288F#40	1 \\, <> 	5288F#aV4	5 	5	1 	1	5 	5s   B BBBc                 D   t        d      }t        dd      }t        j                  j                         5 }|j	                  t
        d       t        ||d      \  }}d d d        t        ||d      \  }}t        |       t        |       t        j                  j                         5 }|j	                  t
        d       t        |d	d
g      \  }}d d d        t        |d	d
g      \  }}t        ||       t        ||       y # 1 sw Y   xY w# 1 sw Y   @xY w)Nr   Tr  r  r  r  r  r  r   rs   r  r  )r\   rR   r  r  r  r  r   r   )r   r   r   r  w_depv_depr   r}   s           r[   test_deprecation_resultsz!TestEigh.test_deprecation_resultsu  s   $Q'$Qt4 ZZ))+ 	2sJJ)+EF1D1LE5	2 Aq'1q!q! ZZ))+ 	3sJJ)+GHAq62LE5	3 A1v.1q!q!	2 	2	3 	3s   (D
.)D
DDN)r   r   r   r  r  r  r  r  r  r"  r#  parametrizer  r  r  r  r   r   r  r  r   r]   r[   r  r    s    6MpK++ [[Xv.[[X'BC! D /! [[VY/[[X';<
G = 0
G2 [[Xh'785 95"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ej                   j#                  e d      ej                   j&                  d               Zy)TestSVD_GESDDc                 (    d| _         t        d       y )Ngesddr  r  rG   r*  s    r[   r+  zTestSVD_GESDD.setup_method      $T
r]   c                 h    t        t        t        dggd       t        t        t        dggd       y )Nr.  r  r  )r  rx   r   r  r*  s    r[   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 )Nr   rs   r  r   r   TFfull_matricesr  r   r   r   r  r   rU   rF   r9   r@   rY   charr   rw   r   r   r  r  svhsigmar   s           r[   r   zTestSVD_GESDD.test_simple  s    
I.* 	9M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r]   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 )Nr   r   r  r  r   r   r	  r  s           r[   test_simple_singularz"TestSVD_GESDD.test_simple_singular  s    	9-* 	9M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r]   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 )Nr   r  r   r   r  r  r   r   r  r   rU   rF   r@   r9   rY   r
  r   rw   r  s           r[   test_simple_underdetz"TestSVD_GESDD.test_simple_underdet  s    	"* 	9M1M)-););=HAq"%accAgs1771:?1771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r]   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 )	Nrs   rP   r  r   r   r  r  r   r  r  s           r[   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet  s    VaVaV$* 	9M1M)-););=HAq"%accAgs1771:?%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r]   c           
      R   d}d}t        d      D ]  }t        ||g      t        ||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   r  r  rs   r   )r   rH   r   r  r   rU   rF   r@   r9   rY   r
  rw   )
r   rW   mr   r   r  r  r  r  r  s
             r[   test_randomzTestSVD_GESDD.test_random  s   q 
	AAaVnfaVn5 	A%2 AM"1M151C1C EHAq"-accAgs1771:G-b244iRXXa[9IJ!1771:rxx{";QWW\\JE"3q6] +&'dad+-a%i"na@A	A
	A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 )Nr   )rs   y               @r   r   r  r  rs   r   )r   r  r   rT   rU   rF   r@   r9   rY   r
  r   rw   r  s           r[   r   z!TestSVD_GESDD.test_simple_complex  s    
I.* 	9M1M)-););=HAq"%affhjj1nc!''!*oF%bggikkB&6BHHQK8HI1771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r]   c           
      \   d}d}t        d      D ]  }dD ]  }t        ||g      t        ||g      fD ]  }|dt        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   r  rO   r  rs   r   )r   rH   listr@   r   r  r   rT   rU   rF   r9   rY   r
  rw   )
r   rW   r  r   r  r   r  r  r  r  s
             r[   test_random_complexz!TestSVD_GESDD.test_random_complex  s   q 	AA!. A !Q.&!Q.9 AABvd177m444A"1M151C1C EHAq"-affhjj1n.1!''!*o?
 "1771:rxx{";QWW\\JE"3q6] +&'dad+-a%i"na@AA	Ar]   c                 b   g d}t         j                  j                  d       |D ]  }t         j                  t         j                  t         j
                  t         j                  fD ]D  }t        j                  j                  | j                  |      }t        || j                         F  y )N))r   r   )r   2   )<   r  r  r  )rR   rH   rG   r;   float64r<   
complex128rS   rV   r   r  )r   sizesszr  r   s        r[   test_crash_1580zTestSVD_GESDD.test_crash_1580  s{    /
		t 	9Bzz2::r||R]]K 9IINNB'..r2AT%7%789	9r]   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 )Nr   r  r   F)r   r  r   r   r	  )r   r   r  r  r  r  r   s          r[   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(  rU  rU  rU  )rU  r(  r)  r(  rU  rU  )rU  rU  r(  r)  r(  rU  )rU  rU  rU  r(  r)  r(  r  )rR   r4   r   r  )r   r   s     r[   test_gh_5039zTestSVD_GESDD.test_gh_5039  s6     HH====?@
 	AT//0r]   z64-bit LAPACK requiredr   c                     t        d       t        j                  ddgt        j                        }d|d<   t	        |d      \  }}}t        |d	   d
       t        |d   |d   z  d
       y )NihB  )free_mbrs   l        r1  r  F)r  r   r.  r   )rK   rR   r9   r;   r   r   )r   rZ   r  r  r  s        r[   test_large_matrixzTestSVD_GESDD.test_large_matrix  sd     	%(HHaZrzz2%q.1b!c"$"U)+S1r]   N)r   r   r   r+  r  r   r  r  r  r  r   r  r%  r  r*  r"  r#  skipifrL   slowr-  r   r]   r[   r  r    s    D
9
9	9
9A
9A&951" [[I.FG[[2  H2r]   r  c                       e Zd Zd Zy)TestSVD_GESVDc                 (    d| _         t        d       y )Ngesvdr  r  r*  s    r[   r+  zTestSVD_GESVD.setup_method   r  r]   N)r   r   r   r+  r   r]   r[   r1  r1    s    r]   r1  c                   t    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	        Zy
)TestSVDValsc                     g gt        j                  d      t        j                  d      fD ],  }t        |      }t	        |t        j                  d             . y )N)rP   r   )r   r   r   )rR   r   r   r   r   r   r   r  s      r[   
test_emptyzTestSVDVals.test_empty'  sF    rxx'8 	)A
ABHHQK(	)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 )Nr   r   r   r   rs   rP   r   r   rw   r7  s      r[   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 )Nr   r  rP   r   rs   r:  r7  s      r[   r  z TestSVDVals.test_simple_underdet2  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 )Nrs   rP   r  r   r   r   r:  r7  s      r[   r  zTestSVDVals.test_simple_overdet8  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 )Nr   )rs   r                @r   r   r   rs   rP   r:  r7  s      r[   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 )Nr   )r  y              @r   rP   r   rs   r:  r7  s      r[   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complexD  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 )Nrs   rP   r  r   r>  r   r:  r7  s      r[   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complexJ  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 )	Nr   r   Fr   r   r   rs   rP   r:  r7  s      r[   r  zTestSVDVals.test_check_finiteP  sN    	9-AE*A!!!$!$%$%r]   c                     t         j                  j                  d       t         j                  j                  dd      }t	        |       y )Nr  i  i
  )rR   rH   rG   rS   r   r   r   s     r[   test_crash_2609zTestSVDVals.test_crash_2609V  s-    
		tIINN4&
r]   N)r   r   r   r8  r   r  r  r   r@  rB  r  r"  r#  r/  rF  r   r]   r[   r5  r5  %  sH    )
&&& [[ r]   r5  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rs   r   r   r   r   )r   r   r*  s    r[   r   zTestDiagSVD.test_simple`  s     !')Q":#,i"C	Er]   N)r   r   r   r   r   r]   r[   rH  rH  ^  s    Er]   rH  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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 Z6d5 Z7y6)7TestQRc                     t        d       y r  r  r*  s    r[   r+  zTestQR.setup_methodg  r  r]   c                     g dg dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y N   rP   r   rP   r   r   r   r   r   r   r   r   rU   rF   r   r   qrs       r[   r   zTestQR.test_simplej  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 )NrP  rR  rS  r   r   r   r   r   r   rF   r   r   rV  rW  cqcr2s          r[   test_simple_leftzTestQR.test_simple_leftp  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 )NrP  rR  rS  r   r   rY  rZ  s          r[   test_simple_rightzTestQR.test_simple_rightz  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 )	NrP  rR  rS  Tpivotingrs   r   r   
rR   rC   r   rL  r5   r   r   r   rU   rF   r   r   rV  rW  pr|   q2r]  s           r[   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 )NrP  rR  rS  Trb  r   r   r   r   r   r   r   rV  rW  jpvtr[  r\  s          r[   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 )NrP  rR  rS  Trb  r   rj  rk  s          r[   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 )NrP  rR  rP   rT  rU  s       r[   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 )NrP  rR  Trb  rs   r   rP   rd  re  s           r[   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 NrQ  rP   r   r   r   rT  rU  s       r[   test_simple_tallzTestQR.test_simple_tall  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 )
NrQ  rP   r   r   r   Trb  rs   r   rd  re  s           r[   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting  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 )
NrQ  rP   r   r   r   economicmoder   rP   r  r   r   rU   rF   r   r@   rU  s       r[   test_simple_tall_ezTestQR.test_simple_tall_e  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 )NrQ  rP   r   r   r   Tr{  rc  r}  rs   r   r|  rd  re  s           r[   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivoting  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 )NrQ  rP   r   r   r   r{  r|  rs   r   rs   rP   r   Toverwrite_cr   r   r   r4   rF   rZ  s          r[   test_simple_tall_leftzTestQR.test_simple_tall_left  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 )NrQ  rP   r   r   r   r{  Tr}  rc  rs   r   )r   r   r   r   rF   )r   r   rV  rW  rl  r[  r\  kpvts           r[   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivoting  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 )	NrQ  rP   r   r   r   r{  r|  r   rY  r   r   rV  rW  r[  cqr]  s          r[   test_simple_tall_rightzTestQR.test_simple_tall_right  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 )NrQ  rP   r   r   r   Tr{  r  r   rb  rY  r   r   rV  rW  rl  r[  r  s          r[   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivoting  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rQ  rP   r   rR  rP   r  rP   r   r  rU  s       r[   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  rR  Trb  rs   r   rP   r  r  rR   rC   r   rL  r5   r   r   r   rU   rF   r   r@   re  s           r[   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 )NrP  rP   r   r   r{  r|  rP   r  r  r  rU  s       r[   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 )NrP  r  Tr{  r  rs   r   rP   r  r  r|  r  re  s           r[   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 )NrP  r  r{  r|  rs   rP   r   rY  rZ  s          r[   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 )	NrP  r  r{  Tr  rs   rP   r   rY  rk  s          r[   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting8  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 )NrP  r  r{  r|  rs   rP   rY  r  s          r[   test_simple_fat_rightzTestQR.test_simple_fat_rightA  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 )	NrP  r  Tr{  r  rs   rP   rb  rY  r  s          r[   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivotingK  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r         @      @r   r   rP   y       @      @r   rP   r  r   )r   r   rT   rU   rF   rU  s       r[   r   zTestQR.test_simple_complexT  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  rs   rP   r  r   r   rY  r   r   rV  rW  r[  r\  s         r[   test_simple_complex_leftzTestQR.test_simple_complex_leftZ  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  r   rY  r  s         r[   test_simple_complex_rightz TestQR.test_simple_complex_rightc  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 )NrQ  y       @      @rP   r   y      @      @r   r{  r|  rs          @       @r   r  Tr  r  rZ  s          r[   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_leftl  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   rT   r  s         r[   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugatey  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 )Nr   r  r   r  rP   r{  r|  rs   r   Tr  r  r  s         r[   '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   rR   r4   r   r   rT   r  s         r[   #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  Trb  rs   r   r   )r4   r   rL  r5   r   rR   r   r   rT   rU   rF   re  s           r[   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  Trb  r  r   r4   r   r   r   rk  s          r[   !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  Trb  r  r  rk  s          r[   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting  sL    <y9:D)
1d!!Q6At!!a%,r]   c                     d}t        d      D ]N  }t        ||g      }t        |      \  }}t        |j                  |z  t        |             t        ||z  |       P y Nr  rP   r   rH   r   r   rU   rF   r   rW   r  r   rV  rW  s         r[   r  zTestQR.test_random  sX    q 	0A1vAa5DAq%accAgs1v6%a!eQ/		0r]   c                     d}t        d      D ]m  }t        ||g      }t        |      \  }}t        |g      }t        ||d      \  }}t	        ||z  |       t        |t        |      d      \  }}t	        ||       o y )Nr  rP   r   r   rH   r   r   r   rF   r   rW   r  r   rV  rW  r[  r\  s           r[   test_random_leftzTestQR.test_random_left  s    q 	-A1vAa5DAqsA1f-EB%a!eR03q662EB%a,	-r]   c                     d}t        d      D ]k  }t        ||g      }t        |      \  }}t        |g      }t        ||      \  }}t	        ||z  |       t        |t        |            \  }}t	        ||       m y r  r  r   rW   r  r   rV  rW  r[  r  s           r[   test_random_rightzTestQR.test_random_right  s{    q 	-A1vAa5DAqsA1%EB%a!eR03q6*EB%a,	-r]   c           	         d}t        d      D ]  }t        ||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  rP   Trb  rs   r   r   rH   r   rL  r5   r   rR   r   r   rU   rF   
r   rW   r  r   rV  rW  rf  r|   rg  r]  s
             r[   test_random_pivotingzTestQR.test_random_pivoting  s    q 		-A1vAT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a,		-r]   c                     d}d}t        d      D ]N  }t        ||g      }t        |      \  }}t        |j                  |z  t        |             t        ||z  |       P y N   r  rP   r  r   r  rW   r  r   rV  rW  s          r[   test_random_tallzTestQR.test_random_tall  s]    q 	0A1vAa5DAq%accAgs1v6%a!eQ/		0r]   c                    d}d}t        d      D ]o  }t        ||g      }t        |d      \  }}t        |g      }t        ||d      \  }}t	        ||z  |       t        |t        |      d      \  }}t	        ||       q y )Nr  r  rP   r{  r|  r   r  )	r   r  rW   r  r   rV  rW  r[  r\  s	            r[   test_random_tall_leftzTestQR.test_random_tall_left  s    q 	-A1vAaj)DAqsA1f-EB%a!eR03q662EB%b!,	-r]   c                    d}d}t        d      D ]m  }t        ||g      }t        |d      \  }}t        |g      }t        ||      \  }}t	        ||z  |       t        |t        |            \  }}t	        ||       o y Nr  r  rP   r{  r|  r  )	r   r  rW   r  r   rV  rW  r[  r  s	            r[   test_random_tall_rightzTestQR.test_random_tall_right  s    q 	-A1vAaj)DAqsA1%EB%a!eR03q6*EB%b!,	-r]   c           	         d}d}t        d      D ]  }t        ||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  rP   Trb  rs   r   r  r   r  rW   r  r   rV  rW  rf  r|   rg  r]  s              r[   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s    q 		-A1vAT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a,		-r]   c                 (   d}d}t        d      D ]  }t        ||g      }t        |d      \  }}t        |j                  |z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y r  )r   rH   r   r   rU   rF   r   r@   r  s          r[   test_random_tall_ezTestQR.test_random_tall_e  s    q 	*A1vAaj)DAq%accAgs1v6%a!eQ/1a&)1a&)	*r]   c           	         d}d}t        d      D ]  }t        ||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  rP   Tr{  r  rs   r   r|  )r   rH   r   rL  r5   r   rR   r   r   rU   rF   r   r@   r  s              r[   test_random_tall_e_pivotingz"TestQR.test_random_tall_e_pivoting  s    q 	-A1vAT
;GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW51a&)1a&)!Q$j1FB%a,%a,	-r]   c                     d}d}t        d      D ]N  }t        ||g      }t        |      \  }}t        |j                  |z  t        |             t        ||z  |       P y Nr  r  rP   r  r  s          r[   test_random_trapzTestQR.test_random_trap"  s]    q 	0A1vAa5DAq%accAgs1v6%a!eQ/		0r]   c           	         d}d}t        d      D ]  }t        ||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  rP   Trb  rs   r   r  r  s              r[   test_random_trap_pivotingz TestQR.test_random_trap_pivoting+  s    q 		-A1vAT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a,		-r]   c                     d}t        d      D ]m  }t        ||g      dt        ||g      z  z   }t        |      \  }}t        |j	                         j
                  |z  t        |             t        ||z  |       o y Nr  rP   rO   )r   rH   r   r   rT   rU   rF   r  s         r[   r  zTestQR.test_random_complex9  sp    q 	0A1vr&!Q.00Aa5DAq%affhjj1nc!f=%a!eQ/		0r]   c                 @   d}t        d      D ]  }t        ||g      dt        ||g      z  z   }t        |      \  }}t        |g      dt        |g      z  z   }t        ||d      \  }}t	        ||z  |       t        |t        |      d      \  }}t	        ||        y )Nr  rP   rO   r   r  r  s           r[   test_random_complex_leftzTestQR.test_random_complex_leftA  s    q 	-A1vr&!Q.00Aa5DAqsBvqc{N*A1f-EB%a!eR03q662EB%a,	-r]   c                 <   d}t        d      D ]  }t        ||g      dt        ||g      z  z   }t        |      \  }}t        |g      dt        |g      z  z   }t        ||      \  }}t	        ||z  |       t        |t        |            \  }}t	        ||        y r  r  r  s           r[   test_random_complex_rightz TestQR.test_random_complex_rightL  s    q 	-A1vr&!Q.00Aa5DAqsBvqc{N*A1%EB%a!eR03q6*EB%a,	-r]   c           	         d}t        d      D ]  }t        ||g      dt        ||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  rP   rO   Trb  rs   r   )r   rH   r   rL  r5   r   rR   r   r   rT   rU   rF   r  s
             r[   test_random_complex_pivotingz#TestQR.test_random_complex_pivotingW  s    q 		-A1vr&!Q.00A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 NrP  rR  rS  Fr   r   rT  rU  s       r[   r  zTestQR.test_check_finited  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 )NrP  rR  rS  )lworkr   r-  r   r  r   rP   )r   r   r  	Exception)
r   r   rV  rW  rg  r]  q3r3q4r4s
             r[   
test_lworkzTestQR.test_lworkj  s    	9-!4 1 AQB!"a(!"a( ARB!"a(!"a( ARB!"a(!"a( 	iaTGQ<8iaTGQ<8r]   N)8r   r   r   r+  r   r^  r`  rh  rm  ro  rq  rt  rw  ry  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[   rL  rL  e  s   ,))	)--,	),
)&
)))))&)&))))),)))444	)--0	-	--0---
*-"0-0	-	--,9r]   rL  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)TestRQc                     t        d       y r  r  r*  s    r[   r+  zTestRQ.setup_method  r  r]   c                     g dg dg dg}t        |      \  }}t        ||j                  z  t        d             t        ||z  |       y rO  r   r   rU   rF   r   r   rW  rV  s       r[   r   zTestRQ.test_simple  s?    	9-!u1!!acc'3q62!!a%+r]   c                 h    g dg dg dg}t        |      \  }}t        |d      }t        ||       y )NrP  rR  rS  rW  r|  )r   r   )r   r   rW  rV  r]  s        r[   test_rzTestRQ.test_r  s0    	9-!u1_!!R(r]   c                     d}t        d      D ]N  }t        ||g      }t        |      \  }}t        ||j                  z  t        |             t        ||z  |       P y r  r   rH   r   r   rU   rF   r   rW   r  r   rW  rV  s         r[   r  zTestRQ.test_random  sX    q 	0A1vAa5DAq%a!##gs1v6%a!eQ/		0r]   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y )NrP  rR  r   r  r  s       r[   rq  zTestRQ.test_simple_trap  rr  r]   c                     ddgddgddgg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y rv  r  r  s       r[   rw  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  rR  r   r  r  s       r[   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   rT   rU   rF   r  s       r[   r   zTestRQ.test_simple_complex  sE    <3!u1!!affhjj.#a&9!!a%+r]   c                     d}d}t        d      D ]N  }t        ||g      }t        |      \  }}t        ||j                  z  t        |             t        ||z  |       P y r  r  r   r  rW   r  r   rW  rV  s          r[   r  zTestRQ.test_random_tall  ]    q 	0A1vAa5DAq%a!##gs1v6%a!eQ/		0r]   c                     d}d}t        d      D ]N  }t        ||g      }t        |      \  }}t        ||j                  z  t        |             t        ||z  |       P y r  r  r  s          r[   r  zTestRQ.test_random_trap  r  r]   c                 (   d}d}t        d      D ]  }t        ||g      }t        |d      \  }}t        ||j                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  rP   r{  r|  )r   rH   r   r   rU   rF   r   r@   r  s          r[   test_random_trap_economicz TestRQ.test_random_trap_economic  s    q 	*A1vAaj)DAq%a!##gs1v6%a!eQ/1a&)1a&)	*r]   c                     d}t        d      D ]m  }t        ||g      dt        ||g      z  z   }t        |      \  }}t        ||j	                         j
                  z  t        |             t        ||z  |       o y r  )r   rH   r   r   rT   rU   rF   r	  s         r[   r  zTestRQ.test_random_complex  sp    q 	0A1vr&!Q.00Aa5DAq%a!&&(**nc!f=%a!eQ/		0r]   c                 f   d}d}t        d      D ]  }t        ||g      dt        ||g      z  z   }t        |d      \  }}t        ||j	                         j
                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  rP   rO   r{  r|  )	r   rH   r   r   rT   rU   rF   r   r@   r  s          r[   test_random_complex_economicz#TestRQ.test_random_complex_economic  s    q 	*A1vr&!Q.00A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       r[   r  zTestRQ.test_check_finite  sB    	9-!%(1!!acc'3q62!!a%+r]   N)r   r   r   r+  r   r  r  rq  rw  r  r   r  r  r  r  r  r  r   r]   r[   r   r     sH    ,)0,,,,00	*0	*,r]   r   c                      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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   rT   rU   rR   rF   rw   )r   r   tr  r   r   s         r[   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rQ     r   rR  r-  r   r   +=+<r   r   r?  )r   r  r   rR   anyr=   r?   r   )r   r   r  r  tczctc2zc2s           r[   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lhprP         rt   rhpiucoucc                     | dk\  S )NrU  r   )rm   s    r[   <lambda>zTestSchur.<lambda>  s
    AH r]   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/  g      g      r/  r.  r         @      g      @r5  r2  r0        @rA   r!  r"  r#  -q=r   rP   )r   r  r   rR   r5   r   )r   rA   expected_diagr   r  r  sdims          r[   	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 )Nr1  r3  r4  r7  unsupportedr9  rs   )r  r  r   rE  s     r[   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  rR  r   Fr   )r   r   rT   rU   )r   r   r  r  s       r[   r  zTestSchur.test_check_finite  s;    J/QU+1!!a%!&&(**"4a8r]   N)r   r   r   r  r   r"  r#  r  rR   r>   r>  rA  r  r   r]   r[   r  r    s   4> [[
72771:+tWRWWQZ5	6
'"''!*cGBGGAJ;5	6
$WRWWQZ'"''!*5	6
'"''!*wrwwqzk45	6
wrwwqz3TB	C		E

49r]   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	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@rs   calc_qr  decimalr   r   rU   r   r   h1r~   rV  s        r[   r   zTestHessenberg.test_simple$  sX     ..!# !A&1!!##'A+q1!!R3r]   c                     g dg dg dg}t        |d      \  }}t        |j                         j                  |z  |z  |       y )NrF  )rH  y             f@rJ  )y             ;r  rL  rs   rP  )r   r   rT   rU   r   r   r~   rV  s       r[   r   z"TestHessenberg.test_simple_complex/  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)rs   rP   r   r  r   r   r  )r   rP   r   r  r   r  rP   )r   rP   rP   r   r   r   rP   )r   r   rP   rQ  r   r   rP   )r   r   rs   rP   r   rs   rP   )r   rs   rP   r   r   rs   r   )r   r   r   r   r   rs   rP   rs   rP  rT  rX  s       r[   test_simple2zTestHessenberg.test_simple26  sF    """""""$ !A&1!!##'A+q1r]   c                     t        j                  d      }d|d<   t        |d      \  }}t        |j                  |z  |z  |       y )Nr   rP   )r   r   rs   rP  )rR   rF   r   r   rU   rX  s       r[   test_simple3zTestHessenberg.test_simple3A  s>    FF1I%!A&1!!##'A+q1r]   c                     d}t        d      D ];  }t        ||g      }t        |d      \  }}t        |j                  |z  |z  |       = y )Nr  rP   rs   rP  )r   rH   r   r   rU   r   rW   r  r   r~   rV  s         r[   r  zTestHessenberg.test_randomG  sM    q 	6A1vAa*DAq%accAgk15	6r]   c                     d}t        d      D ]Z  }t        ||g      dt        ||g      z  z   }t        |d      \  }}t        |j	                         j
                  |z  |z  |       \ y )Nr  rP   rO   rs   rP  )r   rH   r   r   rT   rU   r^  s         r[   r  z"TestHessenberg.test_random_complexN  sf    q 	=A1vr&!Q.00A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 )NrF  rG  rK  rM  rN  rO  rs   F)rQ  r   r  rR  rT  rU  s        r[   r  z TestHessenberg.test_check_finiteU  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 )
NrP   rs   r  r  rP  y       @      r   y      @      @y      (@       )r   r   rR   rF   )r   r   r~   rV  r   h2rg  s          r[   test_2x2zTestHessenberg.test_2x2`  s~    VaW!A&1!!RVVAY/!!Q'D\D%=)Aa(B!"bffQi0!"a(r]   N)r   r   r   r   r   rZ  r\  r  r  r  rc  r   r]   r[   rD  rD  "  s*    	49	226=	4
)r]   rD  zBuild Dependenciesblasnameversionc                       e Zd Zd Zej
                  j                  ej                  dk(  xr e	dk(  xr e
dk  d      d        Zd Zd	 Zd
 Zd Zd Zd Zy)TestQZc                     t        d       y Ni90  r  r*  s    r[   r+  zTestQZ.setup_methodt  	    Ur]   darwinopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   c                    d}t        ||g      j                  t              }t        ||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 )Nr   rR  r   )rH   rV   r;   r   r   rU   rF   r   rR   r   r5   r   rW   rZ   r   AABBQr  s           r[   test_qz_singlezTestQZ.test_qz_singlew  s     Aq6N!!'*Aq6N!!'*!QxB1!!b&133,1=!!b&133,1=!!acc'3q61=!!acc'3q61=tBx1}%&r]   c                    d}t        ||g      }t        ||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   r   	rH   r   r   rU   rF   r   rR   r   r5   ro  s           r[   test_qz_doublezTestQZ.test_qz_double  s    Aq6NAq6N!QxB1!!b&133,2!!b&133,2!!acc'3q62!!acc'3q62tBx1}%&r]   c                    d}t        ||g      dt        ||g      z  z   }t        ||g      dt        ||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   rO   r   )rH   r   r   rT   rU   rF   r   rR   r   r5   re   ro  s           r[   test_qz_complexzTestQZ.test_qz_complex  s   Aq6NR1v..Aq6NR1v..!QxB1!!b&1668::"5q9!!b&1668::"5q9!!affhjj.#a&9!!affhjj.#a&9tBx1}%&tBx}})*+r]   c                 "   d}t        ||g      dt        ||g      z  z   j                  t              }t        ||g      dt        ||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   rO   rR  r   )rH   rV   r<   r   r   rT   rU   rF   r   rR   r   r5   re   ro  s           r[   test_qz_complex64zTestQZ.test_qz_complex64  s   QF^bA//77	BQF^bA//77	B!QxB1!!b&1668::"5q!D!!b&1668::"5q!D!!affhjj.#a&!D!!affhjj.#a&!DtBx1}%&tBx}})*+r]   c                    d}t        ||g      }t        ||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   r?  )outputr   )rH   r   rT   rU   r   rd   re   rF   r   rR   r   r5   )
r   rW   rZ   r   rp  rq  rr  r  aabbs
             r[   test_qz_double_complexzTestQZ.test_qz_double_complex  s    Aq6NAq6N!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       Er8  )皙@r5        Gr5  )r.  r.  r0  r.  )r.  r   g      r  )r.  r_   r6  r.  )r  r   r6  r2  c                     |dk(  S )Nr   r   )rk   aibetas      r[   r/  z,TestQZ.test_qz_double_sort.<locals>.<lambda>  s
    bAg r]   r9  )	rR   r4   r  r  r   r   r   rU   rL  )r   rZ   r   rp  rq  rr  r  r=  s           r[   test_qz_double_sortzTestQZ.test_qz_double_sort  sZ     HH--,,. /
 HH++++- .
 	j"a1MNr]   c                    d}t        ||g      }t        ||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   Fr   r   ru  ro  s           r[   r  zTestQZ.test_check_finite  s    Aq6NAq6N!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$  sysplatformblas_providerblas_versionrs  rv  rx  rz  r  r  r  r   r]   r[   rh  rh  s  sx     [[  	$#	$|#I	  	'	'	'
,
,'5FF	'r]   rh  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              )rO   y333333@y              y      @      )r  r  r  r*  r  )r  r  r  r8  )r  g      :@r  r5  )rs   rP   rs   )rs   r   r  )rs   r   r   )rs   r   r  r  )r  r.  r   r   )r2  r2  r_         @)r  r2  r.  r   )rU  r2         @r  )r        $@r5  r  )r  r  r_   r   )r   r.  r5  r5  )r  r.  r2  r  rP   r   rs   )rR   r4   rF   r5   rZ   r   )
clsA1B1A2B2A3B3A4B4A5s
             r[   r  zTestOrdQZ.setup_class*  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   r9  )rR   r   ziprZ   r   r    tuple)r   rA   AiBirets        r[   	qz_decompzTestOrdQZ.qz_decompa  sj    [[W% 	O:=dffdff:MNB5Rd+NCN	OSz O	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   rs   rP   T)rR   rF   r@   r   rU   rT   r   trilr9   r   r
   re   r   r   r2   r4   )r   rZ   r   rA   rp  rq  alphar  rr  r  Idr   evals_tmpsortfunlastsortcursorts                     r[   checkzTestOrdQZ.checkf  s   VVQWW!!acchhj."5!!acchhj."5!!b&!a%0!!b&!a%02772r?BHHRXX,>?2772r?BHHRXX,>?qwwqz" 	M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/	M0 #4(qwwqz" 	Abhhaz2BHHd1gY4GHG ""{H	r]   c                     | j                  |      }t        || j                  | j                        D ]  \  }}} | j                  |||g|   y r(  )r  r  rZ   r   r  )r   rA   r  retir  r  s         r[   	check_allzTestOrdQZ.check_all  sM    nnT"TVVTVV4 	,LD"bDJJr2t+d+	,r]   c                 &    | j                  d       y )Nr)  r  r*  s    r[   test_lhpzTestOrdQZ.test_lhp      ur]   c                 &    | j                  d       y )Nr+  r  r*  s    r[   test_rhpzTestOrdQZ.test_rhp  r  r]   c                 &    | j                  d       y )Nr,  r  r*  s    r[   test_iuczTestOrdQZ.test_iuc  r  r]   c                 &    | j                  d       y )Nr-  r  r*  s    r[   test_ouczTestOrdQZ.test_ouc  r  r]   c                 ,    d }| j                  |       y )Nc                     t        j                  | t              }|dk7  }d|| <   | |   ||   z  j                  dk(  ||<   |S Nr1  r   FrR   
empty_likeboolre   rm   r  r`   nonzeros       r[   rA   z TestOrdQZ.test_ref.<locals>.sort  L    --.CAvG!CMgJqz1771<CLJr]   r  r   rA   s     r[   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       r[   rA   z TestOrdQZ.test_cef.<locals>.sort  r  r]   r  r  s     r[   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 )Nrs   rP   r)  r9  )r    rZ   r   r  )r   r  s     r[   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 )NrP   r   rt   r)  r*  r+  r,  r-  y             ?y      ?      ?yٿɿ      ?      r   rs   r9  )	rR   rF   r5   r   nanr  r    r  r   )r   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rZ   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzerorm   s                                 r[   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 		5BI-6 5))*/BW*E'1eT1a!MM%(#%66%%- $&FF5&5.!!5&M$v,65&	 0!45		5r]   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r]   r[   r  r  )  sM    4% 4%l
,\,		6-5r]   r  c                   P    e Zd Zd Zd Zej                  j                  d        Zy)TestOrdQZWorkspaceSizec                     t        d       y rj  r  r*  s    r[   r+  z#TestOrdQZWorkspaceSize.setup_method  rk  r]   c                    d}t         j                  t         j                  fD ]J  }t        ||f      j	                  |      }t        ||f      j	                  |      }t        ||d d      }L t         j                  t         j                  fD ]J  }t        ||f      j	                  |      }t        ||f      j	                  |      }t        ||d d      }L y )N   c                     | |k  S r(  r   r  r  s     r[   r/  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  
    UT\ r]   rd   )rA   r|  c                     | |k  S r(  r   r  s     r[   r/  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  r  r]   r?  )rR   r;   r!  rH   rV   r    r"  r<   )r   rD  ddtyperZ   r   r  s         r[   test_decomposez%TestOrdQZWorkspaceSize.test_decompose  s     zz2::. 	%F1v%%f-A1v%%f-Aa!A#%A		% }}bll3 	(F1v%%f-A1v%%f-Aa!A&(A	(r]   c                 (   d}t         j                  t         j                  t         j                  t         j                  fD ]O  }t        ||f      j                  |      }t        ||f      j                  |      }t        ||d      \  }}}}}	}
Q y )Nr  r-  r9  )rR   r;   r!  r"  r<   rH   rV   r    )r   rD  r  rZ   r   SrU   r  r  UVs              r[   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc
	  s~      zz2::r}}bllK 	>F1v%%f-A1v%%f-A&+Aqu&=#Aq%q!	>r]   N)	r   r   r   r+  r  r"  r#  r/  r  r   r]   r[   r  r    s*    ($ [[> >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   )_datacopiedrs   rP   r   c                       e Zd Z fdZy)-TestDatacopied.test_datacopied.<locals>.Fake1c                     S r(  r   r  s    r[   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__!	  s    r]   N)r   r   r   r  rZ   s   r[   Fake1r   	  s    r]   r  c                   (    e Zd ZW  j                  Zy)-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r   s   r[   Fake2r  $	  s    "#"7"7r]   r  FTr   )scipy.linalg._decompr  rJ   rC   tolistr   r   repr)r   r  r  LM2r  r  F1F2itemstatusarrrZ   s               @r[   test_datacopiedzTestDatacopied.test_datacopied	  s    4QFQF#$AJHHJVVX	 		8 	8 WWZ!UaY %[2u+E{D 	-LD&$-CS$/!%d-	-r]   N)r   r   r   r  r   r]   r[   r  r  	  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  r1  rP   r  offsetcountrY   r-  r-  Toverwrite_aN)	r:   rR   uint8
frombufferdatar;   r@   r
   rU   r   r  s     r[   test_aligned_mem_floatr  1	  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$  r1  r  r  r  r  Tr  N)	r:   rR   r  r  r  r=  r@   r
   rU   r  s     r[   test_aligned_memr  >	  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  r1  rQ  r  r  r  Tr  N)	r9   rR   r  r  r  r?  r@   r
   rU   r  s     r[   test_aligned_mem_complexr!  M	  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 )NrQ  r1  r  r  .rs   )r  r   rw   ru   rR   rE   r9   r   rY   itemsizer  r  r  r@   rU   )funcrG  kwargsr   r   r}  s         r[   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-  r1  r  r  i N  r  r  Tr  )overwrite_b)r  r)  )rR   rF   r=  r:   r@   r  r  r  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   r&  )	r  Rr  r   LUpivr$  rG  r%  s	            r[   test_lapack_misalignedr.  m	  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!! 4tV$ 	 dF3%4r]   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  )rI   r
   r*  s    r[   test_eigzTestOverwrite.test_eig	  s    C&*C&&!12r]   c                 J    t        t        dg       t        t        ddg       y r2  )rI   r   r*  s    r[   	test_eighzTestOverwrite.test_eigh	  s    D6(+D66"23r]   c                 &    t        t        dg       y Nr~  )rI   r   r*  s    r[   ry  zTestOverwrite.test_eig_banded	      J1r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_eigvalszTestOverwrite.test_eigvals	      GfX.r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_eigvalshzTestOverwrite.test_eigvalsh	  s    Hvh/r]   c                 &    t        t        dg       y r7  )rI   r   r*  s    r[   ro  z!TestOverwrite.test_eigvals_banded	  s    NVH5r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_hessenbergzTestOverwrite.test_hessenberg	  r8  r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   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 )Nr   r  )r  rQ  rQ  c                     t        |       S r(  )r   )r   xlus    r[   r/  z-TestOverwrite.test_lu_solve.<locals>.<lambda>	  s    hsA&6 r]   )r   )rR   r4   r   rI   )r   rm   rE  s     @r[   test_lu_solvezTestOverwrite.test_lu_solve	  s.    HHiI67l6?r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_luzTestOverwrite.test_lu	      B)r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_qrzTestOverwrite.test_qr	  rI  r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_rqzTestOverwrite.test_rq	  rI  r]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   
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   r   s    r[   r/  z2TestOverwrite.test_schur_complex.<locals>.<lambda>	  s    eAy&9 r]   r  )dtypes)rI   rR   r;   r!  r*  s    r[   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 )Nr3  r  )r   rR  s    r[   r/  z(TestOverwrite.test_svd.<locals>.<lambda>	  s    c!7&C r]   )rI   r   r*  s    r[   test_svdzTestOverwrite.test_svd	  s    C&*CfXNr]   c                 &    t        t        dg       y r2  )rI   r   r*  s    r[   test_svdvalszTestOverwrite.test_svdvals	  r;  r]   N)r   r   r   r3  r5  ry  r:  r=  ro  r@  rB  rF  rH  rK  rM  rO  rT  rW  rY  r   r]   r[   r0  r0  	  sT    342/0621@
***-=O/r]   r0  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 )NrP   r1  r  rs   r   rP   rs   r   -C6?MbP?rcondư>r   )rR   r   r=  rV   rf   r  r   r   r@   r   meanrU   rH   rG   rS   )rW   rY   skip_bigXr  tolYs          r[   _check_orthrg  	  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]   rQ  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)rc  z.memory error perhaps caused by orth regression)rg  rR   r!  MemoryErrorAssertionError)rW   r  s     r[   test_orth_memory_efficiencyrk  	  sA     	AArzzD1 <
	s   ! 	;6;c                      t         j                  t         j                  t         j                  t         j                  g} g d}t        j                  | |      D ]  \  }}t        ||        y )Nrs   rP   r   r-  r  )rR   r;   r!  r<   r"  	itertoolsproductrg  )rS  r#  r  rW   s       r[   	test_orthrp  	  sO    jj"**bllBMMBFE""651 AAr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 )Nrs   rm  rP   r1  r  r   r[  r\  r   r]  r^  r_  ra  r   )rR   rH   rG   r;   r!  r<   r"  rn  ro  r   rf   r  r%   r   r@   r   rU   randnrS   rV   )rS  r#  r  rW   rd  r  re  rf  s           r[   test_null_spacers  	  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*-;.r]   c            	      P   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       y )NrQ  r   r_   r!  r[  rs   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rP   r   r:  r;  gL0?gĹ-?gyv?r   rJ  )r   rs   r   )r   r   rs   r   r2  r  rU  )r"   r=  r   r!   rR   pir9   r@   r4   r  r  )HrZ   r   rm   r  r   r   s          r[   test_subspace_anglesrw   
  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: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)rR   einsum)r   r   r   s      r[   matmulzTestCDF2RDF.matmul\
  s    yy-q!44r]   c                 \    t        | j                  ||      | j                  ||             y r(  )r   r|  )r   r   r}   rm   s       r[   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   )rR   r   r&   r~  r   rd  r   r}   wrr   s         r[   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0reale
  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 )Nrs   rP   r   r   rR   r4   r7   r
   r&   r~  r  s         r[   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_reall
  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 )Nrs   rP   r   r  r  s         r[   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complexr
  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 )Nr   r   r  r  s         r[   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_realx
  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 Nr   )r   r  r   )r   r  r  r  r  s         r[   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 )Nrs   r  iɚ;r  )	r   rR   rH   rG   rS   r7   r
   r&   r~  r   r  rd  r   r}   r  r   s          r[   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arrays
  st    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 )Nrs   r  r-  )r   rR   rH   rS   r7   r
   r&   r~  r  s          r[   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays
  sf    q! 	-A		r2q!,A99==#DAqQ]FB!!"b!,		-r]   c                     t        j                  d      t        j                  d      }}t        t        t
        ||       y )Nr   )rP   )rR   r   r4   r  r  r&   r   r   r}   s      r[   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 )Nr   r   rP   rR   r:   r  r  r  r&   r  s      r[   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  rR   r4   r7   r
   r  r  r&   r   rd  r   r}   s       r[   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 )Nr   r   r  r  r  s      r[   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 )Nr   r   )rP   r   y      @      r  r  s       r[   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]   r[   ry  ry  Z
  sH    5
)))))--11
11
1r]   ry  )r  )F)rn  r  r  numpyrR   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   numpy.randomrG   rH   scipy.linalg._testutilsrI   scipy.sparse._sputilsrJ   scipy._lib._testutilsrK   scipy.linalg.blasrL   scipy.__config__rM   ImportErrorr=  r\   r!  REAL_DTYPESr"  rQ   r  rc   r   r   r   r&  r  r  r  r1  r5  rH  rL  r   r  rD  r  r  rh  r  r  r  r  r#  r.  machiner  r!  r&  r$  r.  r0  rg  r/  rY   intpr#  rk  rp  rs  rw  ry  r   r]   r[   <module>r     s     
 5 5  *N N N N N N N NA A A $ 4 #; ; ; ; ; ; & 7 ( 3 ''
 (-E  zz2::&,,.	~	%#$4. .>W- W-tU, U,plF lF^[" ["|R2 R2jM 6 6rE E[9 [9|e, e,P49 49nH) H)V  $ #	/08@M./7	BLs' s'lG5 G5T >  >F- -6
 $H$$&)3/  1
1
#$ uL  N4N4@5/ 5/p*6 HBHHRWW%..2?  AA #.L7;t[1 [1eQ  Fs   K K#"K#