
     h                       d Z dZ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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< dd	l=m>Z> dd
l?m@Z@ ddlmAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZb decfdZdejI        eje        gZfejJ        ejg        gZhefehz   ZidVdZjd Zkd Zld Zm G d d          Zn G d d          Zo G d d          Zp G d d          Zq G d  d!          Zr G d" d#          Zs G d$ d%es          Zt G d& d'          Zu G d( d)          Zv G d* d+ev          Zw G d, d-          Zx G d. d/          Zy G d0 d1          Zz G d2 d3          Z{ G d4 d5          Z| G d6 d7          Z} G d8 d9          Z~d: Z G d; d<          Z G d= d>          Z G d? d@          ZdA Zej                             ej                    dBk    dCD          dE             ZdF ZdG Zej                            ddHI          dJ             Z G dK dL          ZdWdMZej        j        ej                             ejU        ej                  j        dNk     dOD          dP                         ZdQ ZdR ZdS Z G dT dU          ZdS )Xz* Test functions for linalg.decomp module

z~
Build linalg:
  python setup_linalg.py build
Run tests if scipy is installed:
  python -c 'import scipy;scipy.linalg.test()'
    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get_lapack_funcs)norm)_select_function)ortho_group)arraydiagonesfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeyedtypetriutril)seedrandom)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64Fc                    |t           v rdt          j                            | |           t          j                            | |           dz  z   }||                                j        z   dz  }n-t          j                            | |           }||j        z   dz  }|r*|t          d| z            t          j        |           z  z  }|                    |          S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprM   randconjTr@   rH   astype)nposdefrI   As       Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr_   3   s    INN1a  29>>!Q#7#7#<<^QINN1a  WaK !	T!A#YYrvayy  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 numberrS          @)out)rV   
asanyarrayiscomplexobj
clear_fussrealimagfinforI   nmantfrexprintldexp)arfuss_binary_bitsxsignificant_binary_bitsx_mantx_expfs          r^   rg   rg   G   s    
bA	q <!&!!BAF););$;;; hqw//5HQKKMFE%(889A
aKFGF
aKF8FE"""r`   c                    t          | t                    r| j        } nt          |           } t          |t                    r|j        }nt          |          }t          | |k    d                    | |                     d S )Nz%dtype mismatch: "{}" (should be "{}"))
isinstancerG   rI   r   format)actdess     r^   assert_dtype_equalr{   X   s    #w iCjj#w iCjjC3J3::3DDF F F F Fr`   c                    t          | t                    r| }t          |          dz  dz
  }nLt          | t                    r(t	          | j                  dk    r| j        d         }| }nt          d          t          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'.
    rT      r   zinput type not supported.      ?)rw   intrM   rG   lenrB   	TypeErrorr4   rvsrY   rX   r6   )dim_or_eigvdimdvhs        r^   symrandr   i   s     +s## 53KKMA
['
*
* 5
k
 
 A
%
%"3444A	

T!WWq AQSUAHr`   c                     t          |           t          |           }}|dt          |          t          |          z
  z  z   }|                    |          S )NrS   )r   rJ   rK   rZ   )r   rI   a1a2as        r^   _complex_symrandr      sG    S\\73<<B
Rb$r(("##A88E??r`   c                   &    e Zd Zd Zd Zd Zd ZdS )TestEigValsc                     g dg dg dg}t          |          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )Nr}   rT      rT         	   ]   rT   r   r   r@   r   selfr   wexact_ws       r^   test_simplezTestEigVals.test_simple   sc    YY			999-AJJd2hhJ>1qbz1n5!!W-----r`   c                    t          g dg dg dgd          j        }|                                }|j        }t          |          }dt	          d          z   dz  ddt	          d          z
  dz  g}t          ||           d S )Nr   r   r   r   r   rT   r   )r5   rY   copyr   r@   r   r   s       r^   test_simple_trzTestEigVals.test_simple_tr   s    999iii3S99;FFHHCAJJd2hhJ>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          ||           d S )Nr   rT   r   y      @      ?y      "@      ?y      W@      @rT   r   r   r   s       r^   test_simple_complexzTestEigVals.test_simple_complex   sm    YY			<<<0AJJ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          ||           d S )	Nr   r   Fcheck_finiter   r   rT   r   r   r   s       r^   test_finitezTestEigVals.test_finite   sj    YY			999-AE***d2hhJ>1qbz1n5!!W-----r`   N)__name__
__module____qualname__r   r   r   r    r`   r^   r   r      sP        . . .. . .. . .. . . . .r`   r   c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    d          d             Zd	 Zd
 Zd Zd Zd Zd ZdS )TestEigc                 Z   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 ]2}t	          ||d d |f         z  ||         |d d |f         z             3t          |dd          \  }}t          d          D ]7}t	          |j        |d d |f         z  ||         |d d |f         z             8d S )Nr   r   r   r   rT   r   r}   r         @r   r   r   r   r}   r   rT   leftright)r5   r
   r@   r2   r   rD   rangerY   	r   r   r   r   r   v0v1v2is	            r^   r   zTestEig.test_simple   s8   999iii3441vv1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@11A&&&1q 	C 	CA%acAaaadGmQqT!AAAqD'\BBBB	C 	Cr`   c                    t          ddgddgg          }t          |dd          \  }}}t          |t          ddg                     t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )Nr}   rT   r         ?       @y      ?       )r5   r
   r   r   rX   rY   r   r   r   vlvrr   s         r^   test_simple_complex_eigzTestEig.test_simple_complex_eig   s   Aq6B7#$$+++	2r!!UD$<%8%8999q 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r`   c                    t          g dg dg dg          }t          |dd          \  }}}t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )Nr   r   r}   r   r   )r5   r
   r   r   rX   rY   r   s         r^   r   zTestEig.test_simple_complex   s    999iii677+++	2rq 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r`   c                 8   dgg}dgg}t          ||d          \  }}t          |d         d           t          |d         dk               t          |d           t          ||          \  }}t          |t          j                   t          |d           d S )Nr}   r   Thomogeneous_eigvals)r}   r   r   )r
   r   r   r   rV   inf)r   r   br   r   s        r^   test_gh_3054zTestEig.test_gh_3054   s    SESEAqd33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|           +|4t          |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k    }|d|f         |d|f         z  }t	          ||          \  }}t          ||          }||z  }||z  |z  }	||	z
  }t          |j        d                   D ]K}
t          j        t          |d d |
f                             rt          |d d |
f         ddd|           L|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        |                                        d S )N
Tr   r}   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rE   rV   rH   rB   r
   r   r   r   lexsortemptyr   r2   r7   sizeallrF   r:   rg   rC   )r   r]   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   s*   =1::wqzzqABB

AB AAAqq! Art4442Q5552v!QQQ$2v!QQQ$tz!}%% 	A 	AADAJQQQT
!&UCA A A A A :AadGQ'''Bq!!!tHa(((z!}}
2!!!T'
Bqqq%xLt$ #	% 	% 	% 	% #b''""s2ww 	' 	'AR1XF1II 4 4c!	. 	. 	. 	. !QQQ$1q,!A|O"44 Ar

2Q^^2v2vzTksy|$$ 	E 	EAvhs111a4y))** EAAAqD	1%*E E E E (1++HRLL!z%(())
6**++$E!c	; 	; 	; 	; #b''""s2ww 	' 	'AR1XF1II 4 4cBBBB 	R$qQ'8"9"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  |                     ||           d d d            d S # 1 swxY w Y   d S )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   )r5   rV   errstater   r   r]   r   s      r^   test_singularzTestEig.test_singular   s    '''''''''''''''	) * *
 '''''''''''''''	) * * [X&&& 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A66A:=A: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  |                     ||           d d d            d S # 1 swxY w Y   d S )N)r}   r   r   )rT   r   r   )r   rT   r   )r   r   rT   )r}   r   r   )r   r}   r   r   r   r   r   r   r   r  r  )r6   r5   r;   rH   rV   blockr  r   )r   MKDZI3r]   r   s           r^   test_falkerzTestEig.test_falker2  s8   			##$$;;;[[[9:::::zzz999566&MMVVHr1gA2w'((Hq"g1v&''[X&&& 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   7CC"Cc                     d }t          j        d          5  t          d          D ]-} ||dz  dz            \  }}|                     ||           .	 d d d            d S # 1 swxY w Y   d S )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 )	NrT   )r}   r   r   r   )r   r}   r   r   r   )r   r   r}   r   )r   r   r   r}   r}   r   )omegac1c2r]   r   s        r^   matricesz)TestEig.test_bad_geneig.<locals>.matricesB  s}    eQhB5BQAQ2 A QB3QA A a4Kr`   r  r  d         @)r  )rV   r  r   r   )r   r  kr]   r   s        r^   test_bad_geneigzTestEig.test_bad_geneig?  s    	 	 	 [X&&& 	* 	*3ZZ * *xad3h///1##Aq))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   >A%%A),A)c                    t          d           t          d          }|                     |d            t          d          }|                     ||           t          d          dt          d          z  z   }|                     |d            t          d          dt          d          z  z   }|                     ||           d S )N  r   r  rS   )rL   r   r   rM   r	  s      r^   test_make_eigvalszTestEig.test_make_eigvalsV  s    T


AJJAt$$$AJJAq!!!6NNRv..At$$$6NNR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 ]2}t	          ||d d |f         z  ||         |d d |f         z             3d S )Nr   r   Fr   r   r   rT   r   r}   r   r   r   r   r   )r
   r@   r5   r2   r   rD   r   r   s	            r^   test_check_finitezTestEig.test_check_finited  s   YY			999-15)))1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@	A 	Ar`   c                     t          j        d                              dd          }t          t          t
          |           dS )z:Check that passing a non-square array raises a ValueError.r   r   rT   N)rV   r<   reshapeassert_raises
ValueErrorr
   r   r]   s     r^   test_not_square_errorzTestEig.test_not_square_erroru  s7    IaLL  A&&j#q)))))r`   c                     t          d          }t          j        d                              dd          }t	          t
          t          ||           t	          t
          t          ||           dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rT         "@r   N)rH   rV   r<   r&  r'  r(  r
   r	  s      r^   test_shape_mismatchzTestEig.test_shape_mismatchz  sZ     FFIcNN""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      s        C C C(< < << < <
 
 
@; @; @;D [m,,& & -,&"& & &* * *." " "A A A"* * *
- - - - -r`   r   c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )TestEigBandedc                 .    |                                   d S N)create_bandmatr   s    r^   setup_methodzTestEigBanded.setup_method  s    r`   c                    d}d| _         d| _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    d	t          t          |dz
  d          d          z  z   d	t          t          |dz
  d          d          z  z
  t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d
          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        d	t          t          |d                    z  t          t          |dz
  d          d          z   d	t          t          |dz
  d
          d          z  z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        | j        dz   }t!          ||ft"                    | _        t!          ||ft&                    | _        t+          |          D ]P}t          | j        |          | j        ||z
  dz
  ||f<   t          | j        |          | j        ||z
  dz
  ||f<   Qd| j         z  | j        z   dz   }t!          ||ft"                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}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<   qt!          ||ft&                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}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<   qdt1          |          z  | _        | j        dz  | _        dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rT         ?r}         r   g       r   rS         rc   NrI   r         ?      ?)KLKUr6   r8   sym_matherm_matreal_matcomp_matr9   r
   rh   r:   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr;   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr<   r   bc)r   NewevargsLDABr   s          r^   r5  zTestEigBanded.create_bandmat  s     T!S\\**tAaC3346:4!T??A6N6NOtAaC3346:4!T??A6N6NO
 d1dmm,,d4!S>>26667d4!S>>15556  QqS$445  QqS$33	4 d1cll++QqS$4457;D1dOOQ7O7OPQqS#3346:4!T??A6N6NO
 Da...QqS$445d4!T??A6667  QqS#334  QqS$33	4 DL))BWr{{Dqqq$wKDM**BWr{{T(4[
 w{ $%888!4)7;;;t 	F 	FA.24<.C.CDT!VAXqs]+/3DM1/E/EDd1fQh!m,, y47"Q&!4)5999*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 "4)7;;;*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 VAYY&F#r`   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.r}   	compute_vN)r,   rJ  r:   r   rC   rE  absrF  r   r   evecinfoevec_s        r^   
test_dsbevzTestEigBanded.test_dsbev  sv     d.!<<<4QQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr`   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r}   rV  N)r-   rJ  r:   r   rC   rE  rX  rF  rY  s        r^   test_dsbevdzTestEigBanded.test_dsbevd  sv     t/1===4QQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr`   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        r}   rT   rW  r   N)
rB   rA  r.   rJ  r:   r   rC   rE  rX  rF  r   rP  r   rZ  numifailr[  r\  s           r^   test_dsbevxzTestEigBanded.test_dsbevx  s     T\""1$*4+;S#q!56a%A %A %A!4eTQQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr`   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r}   rV  N)r/   rL  r:   r   rC   rG  rX  rH  rY  s        r^   test_zhbevdzTestEigBanded.test_zhbevd  sv     t0A>>>4QQQ

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr`   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.ra  r}   rT   rb  N)
rB   rB  r0   rL  r:   r   rC   rG  rX  rH  rc  s           r^   test_zhbevxzTestEigBanded.test_zhbevx  s     T]##1$*4+<c3156a%A %A %A!4eTQQQ

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr`   c                 T   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                   d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rT   r   r   selectselect_ranger}   h㈵>r   Fr   N)
r   rJ  rh   r   rC   rE  rL  rG  rV   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  sK   t/00
!$u++t~>>> 122!$v,,@@@ {1~~"4#3*-T4LJ J J	!$y//"&.d1f"=	? 	? 	?#D$5+.dD\K K K
!$z"2"2"&/$tAv+">	@ 	@ 	@ .&/.&/"4#3*-Wg<NP P P	!$y//"&.d1f"=	? 	? 	? /$'&0/$'&0#D$5+.2971CE E E
 	"$z"2"2"&/$tAv+">	@ 	@ 	@ t/eDDD
!$u++t~>>>>>r`   c           
         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                             dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrT   r   r   rl  r}   ro  r   Fr   )r   rJ  r:   rh   r   rC   rE  rX  rF  rL  rG  rH  )r   rq  evec_sym	evec_sym_rr  	evec_herm
evec_herm_rs  rt  ru  evec_sym_indrv  evec_herm_indrw  rx  ry  evec_sym_valrz  evec_herm_vals                      r^   test_eig_bandedzTestEigBanded.test_eig_banded0  s    %T%566xQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIII&t'899	qqq'&+"6"667
!$v,,@@@!#j//3t7I3J3JKKK ",T-=47;?,#H #H #H	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J %/t/@69=A4L%J %J %J!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K .&/.&/",T-=47;BG:L#N #N #N	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J /$'&0/$'&0$.t/@69=Dg<N%P %P %P!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K %T%5EJJJxQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIIIIIr`   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rT   Nr}   r   	permute_l)
rB   rC  r(   rM  r?  r@  r6   r   r   r   r   r  rP  lu_symm_bandipivr[  ur   p_linl_linu_lins              r^   test_dgbtrfzTestEigBanded.test_dgbtrfj       T]##1#)$*;TWdg#N#N dD ail+,,tw()) 	? 	?Al1TW9Q;q=!A#a%#78!A#>>>AA !<<<ue!!U+++++r`   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rT   Nr}   r   r  )
rB   rD  r*   rN  r?  r@  r6   r   r   r   r  s              r^   test_zgbtrfzTestEigBanded.test_zgbtrfx  r  r`   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r(   rM  r?  r@  r)   r   r9   r   rC  r   r   r  r  r[  yy_lins         r^   test_dgbtrszTestEigBanded.test_dgbtrs  sm     $*$*;TWdg#N#N dDtwFF4T]DF33!!U+++++r`   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r*   rN  r?  r@  r+   rO  r9   r   rD  r   r  s         r^   test_zgbtrszTestEigBanded.test_zgbtrs  sm     $*$*;TWdg#N#N dDtw$GG4T]DG44!!U+++++r`   N)r   r   r   r7  r5  r]  r_  rf  rh  rj  r{  r  r  r  r  r  r   r`   r^   r2  r2    s          M$ M$ M$bF F FF F F	F 	F 	FG G G	G 	G 	G(? (? (?T8J 8J 8Jt, , ,, , ,, , ,, , , , ,r`   r2  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestEigTridiagonalc                 .    |                                   d S r4  )create_trimatr6  s    r^   r7  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         | _
        dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r9  r:  r}   r;  r   N)r8   r   er6   full_matr9   r
   rh   r:   r   rZ  )r   rP  rQ  rR  rS  s        r^   r  z TestEigTridiagonal.create_trimat  s     aac4dfTVR(8(884??JDM**BWr{{Dqqq$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	           dS )
zTest error conditions.Nr   rS   r:  lapack_driverfoor   r   r   rl  )r'  r(  r#   r   r  r   r6  s    r^   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6ssLLLi!5tvtv{KKKi!5tvtv$&	( 	( 	( 	(j"6$)	+ 	+ 	+ 	+ 	j"6 w	8 	8 	8 	8 	8 	8r`   c           
      "   dD ]@}t          | j        | j        |          }t          t	          |          | j                   AdD ],}t          t          t           | j        | j        ddd           -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                       dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r  r   r   r  rm  rn  r  r  r  r   r}   rm  rn  r  rT   r   ro  r   N)	r#   r   r  r   rC   r   r'  r(  r   )	r   driverr   w_indrs  rt  rw  rx  w_vals	            r^   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  s    B 	7 	7F$TVTV6JJJA%d1ggtv6666' 	/ 	/F*&:DFDF(.s'-/ / / / / 1 	H 	HF(s!S[[]9K$& & &E &d5kk46::: DD(s$$& & &E &d5kk46$tAv+3FGGG fTlV+GfTlV+G(s'79K$& & &E &d5kk46$tAv+3FGGGG+	H 	Hr`   c                 n   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                              dS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   r}   r  rT   r   ro  r   )r'  r(  r$   r   r  r:   r   rC   r   rX  rZ  r   )	r   r  r   rZ  r\  rs  rt  rw  rx  s	            r^   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s    	j"2DFDF$+	- 	- 	- 	-8 	B 	BF&tvtvVLLLGAtGAJJ'E%d1ggtv666%c%jj#di..AAAAj"2DFDF$*3V	M 	M 	M 	M0 	F 	FFDtv;;q=D&s$$& & &GAt &d1ggtv666%c$iiTY@@@DD&s$$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F fTlV+GfTlV+G&s'79K$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F F3	F 	Fr`   N)r   r   r   r7  r  r  r  r  r   r`   r^   r  r    sh               8 8 8 H  H  HD(F (F (F (F (Fr`   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            de          e	j
                            dd	          d
                         Ze	j
                            dd          e	j
                            dd          d                         Zd Ze	j
                            deeg          d             Zd ZdS )TestEighc                 $    t          d           d S Nr!  rL   r6  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                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          ddgddg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          d	dg
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          d	dg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          ddg
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          ddg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          dd	g
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          dd	g
           d d d            n# 1 swxY w Y   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                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          dddgd           d d d            d S # 1 swxY w Y   d S )Nr}   rT   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   rV   r7   testingsuppress_warningsfilterDeprecationWarning)r   sups     r^   test_wrong_inputszTestEigh.test_wrong_inputs  s   j$A888j$A!QIIIj$A!QIIIj$A!Q	 	 	 	 	j$A!Q'(!fq!f	F 	F 	F 	FZ))++ 	BsJJ)+FGGG*dBGQFOORWaV__+,a&1a&B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 	j$A!Q'(!f	. 	. 	. 	.Z))++ 	*sJJ)+FGGG*dBGQFOORWaV__#$a&* * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*
 	j$A!Q')1g	/ 	/ 	/ 	/Z))++ 	+sJJ)+FGGG*dBGQFOORWaV__#%q'+ + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+
 	j$A!Q'(!f	. 	. 	. 	.Z))++ 	2sJJ)+FGGG*dBGQFOORWaV__+,a&2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 	j$A!Q'(!f	. 	. 	. 	. 	j$AHHHHj$AeLLLLj$A!Q"%	1 	1 	1 	1 	j$A!Q"QF%	I 	I 	I 	IZ))++ 	MsJJ)+MNNN*dBGQFOORWaV__!&AeM M M M	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms_   'A'GG!GA$J;;J?J?,A$NN #N A$Q==RR"A&YYYc           	          t          t          t          t          j        ddg          t          j        ddg                     d S )Nr   )r'  r'   r   rV   r7   r6  s    r^   test_nonpositive_bzTestEigh.test_nonpositive_bF  s4    k4!Q"'1a&//JJJJJr`   c                    t          t                    D ]\  }}t          d|          }t          |ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ t          dd|          }t          ||ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ d S )	N   r=  r   rT   r  r}   T)r\   rI   )	enumerateDTYPESr_   r   r   rB   r   r   )r   inddtr   r   r   r   s          r^   test_value_subsetszTestEigh.test_value_subsetsJ  s     (( 
	+ 
	+GC(2666AB7333DAqSVV,,,B1q5)*****(DCCCA1r1g666DAqSVV,,,B1q5)******
	+ 
	+r`   c                     t          ddgddgg          }t          ddgddgg          }t          |          \  }}t          ||          \  }}d S )Nr}   rT   ra   r   r   )r5   r   )r   r   r   r   zs        r^   test_eigh_integerzTestEigh.test_eigh_integerW  sZ    Aq6Aq6"##Aq6Aq6"##Aww1Aqzz111r`   c                     dd l }|j                            d                                          }t	          j        |          }t          t          t          |           t          t          t          |           d S )Nr   rT   )	scipy.sparsesparseidentitytocscrV   
atleast_2dr'  r(  r   )r   scipyr   r   s       r^   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse]  sh    L!!!$$**,,M!j$***j$*****r`   dtype_r  )rR  evdr  evxc                     t          d|          }t          ||          \  }}t          ||z  ||z  z
  ddt          j        |          j        z  d           d S )Nr  )r[   rI   r  ra    r   r   )r_   r   r   rV   rj   eps)r   r  r  r   r   r   s         r^   test_various_drivers_standardz&TestEigh.test_various_drivers_standarde  su     %r888Af%%%1AQ!"(6"2"2"66	! 	! 	! 	! 	! 	!r`   r  r   )gvr  r  c                 t   t          j        d          }t          d          }t          dd          }t          ||||          \  }}|dk    r!t	          ||z  |||z  z  z
  d|d           d S |d	k    r!t	          ||z  |z  ||z  z
  d|d           d S t	          ||z  |z  ||z  z
  d|d           d S )
Ng     @r  Tr\   )r   r   r  r  r}   ra  r  rT   )rV   spacingr_   r   r   )r   r  r  r   r   r   r   r   s           r^    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalizedn  s     z%  $R(($R555a1V$7771199AEAq1uI-r2FFFFFFQYYAEAIA-r2FFFFFFAEAIA-r2FFFFFFr`   c                    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                     d S )
Nr   r}   rT   r  )r}   333333??      ?rT   gffffff?r  r  r  )r_   r   r   r   r   rV   r6   r5   )r   r   r   w2r   w3s         r^   test_eigvalsh_new_argszTestEigh.test_eigvalsh_new_args|  s    $Q''QA///SVVQa!Q000SWWa   2G)))**a!S222SWWa   BHc3Z0011111r`   methodc                 T   t          j        t          d          5   |t          j        d          d           d d d            n# 1 swxY w Y   t          j        t          d          5   |t          j        d          ddg	           d d d            d S # 1 swxY w Y   d S )
NKeyword argument 'turbo')matchrT   rT   Tr  Keyword argument 'eigvals'r   r}   r  )r.  warnsr  rV   r;   )r   r  s     r^   test_deprecation_warningsz"TestEigh.test_deprecation_warnings  s9   \, :< < < 	1 	1F28F##40000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 \, <> > > 	5 	5F28F##aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s#    AAA."BB!$B!c                    t          d          }t          dd          }t          j                                        5 }|                    t
          d           t          ||d          \  }}d d d            n# 1 swxY w Y   t          ||d          \  }}t          ||           t          ||           t          j                                        5 }|                    t
          d           t          |d	d
g          \  }}d d d            n# 1 swxY w Y   t          |d	d
g          \  }}t          ||           t          ||           d S )Nr   Tr  r  r  r  r  r   r   r}   r  r  )r_   rV   r  r  r  r  r   r   )r   r   r   r  w_depv_depr   r   s           r^   test_deprecation_resultsz!TestEigh.test_deprecation_results  s   $Q''$Qt444 Z))++ 	2sJJ)+EFFF1D111LE5	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 Aq'''1q!!!q!!! Z))++ 	3sJJ)+GHHHAq6222LE5	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 A1v...1q!!!q!!!!!s#   1A<<B B 2D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  
  sb         6M 6M 6MpK K K+ + +  + + + [Xv..[X'BCC! ! DC /.! [VY//[X';<<
G 
G =< 0/
G2 2 2 [Xh'7885 5 985" " " " "r`   r  c                   h    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S )TestLUc                 d   t          g dg dg dg          | _        t          g dg dg dg          | _        t          g dg dg dg          | _        t          g dg dg dg          | _        t          g d	g d
g dg          | _        dt          g d	g d
g dg          z  | _        t          g dg dg dg dg          | _        dt          g dg dg dg dg          z  | _        t          d          | _
        t          d          dt          d          z  z   | _        d S )Nr   r   )rT                 @r   r  r   r   )ra      r   )rS                  @              @)y              @r  y              @)y              @y               @y              "@)r}   rT   r   r  )r   r   ra   r  )r   r9     r  rS   )r9  r  r  )r   r   )r5   r   car   cbhrectchrectvrectcvrectrM   medcmedr6  s    r^   r7  zTestLU.setup_method  sy   			999iii899IIIzzz:;; 			999iii899|||\\\BCC LLL,,,HII
E<<<#/<<#2??#4 5 5 5 IIIyyy)))\\\JKK
E999#,99#,99#/<<#1 2 2 2 (##8$$sVH-=-='==			r`   c                     t          |          \  }}}t          ||z  |z  |           t          |d          \  }}t          ||z  |           d S )Nr}   r  )r   r   )r   dataplr  pls         r^   _test_commonzTestLU._test_common  s[    T((1a!!a%!)T22241%%%A!"q&$/////r`   c                     t          |          \  }}t          d|f          \  } ||d          \  }}}t          ||           t          ||           d S )N)getrfFoverwrite_a)r   r1   r   )r   r  l_and_u1piv1r   l_and_u2piv2_s           r^   _test_common_lu_factorzTestLU._test_common_lu_factor  se    "4$#J88!E$E:::$8X...4&&&&&r`   c                 :    |                      | j                   d S r4  )r  r   r6  s    r^   r   zTestLU.test_simple      $&!!!!!r`   c                 :    |                      | j                   d S r4  )r  r  r6  s    r^   r   zTestLU.test_simple_complex      $'"""""r`   c                 :    |                      | j                   d S r4  )r  r   r6  s    r^   test_simple2zTestLU.test_simple2  r*  r`   c                 :    |                      | j                   d S r4  )r  r  r6  s    r^   test_simple2_complexzTestLU.test_simple2_complex  r,  r`   c                 n    |                      | j                   |                     | j                   d S r4  )r  r  r(  r6  s    r^   test_hrectangularzTestLU.test_hrectangular  4    $*%%%##DJ/////r`   c                 n    |                      | j                   |                     | j                   d S r4  )r  r  r(  r6  s    r^   test_vrectangularzTestLU.test_vrectangular  r3  r`   c                 n    |                      | j                   |                     | j                   d S r4  )r  r  r(  r6  s    r^   test_hrectangular_complexz TestLU.test_hrectangular_complex  4    $+&&&##DK00000r`   c                 n    |                      | j                   |                     | j                   d S r4  )r  r  r(  r6  s    r^   test_vrectangular_complexz TestLU.test_vrectangular_complex  r8  r`   c                 n    |                      | j                   |                     | j                   dS z:Check lu decomposition on medium size, rectangular matrix.N)r  r  r(  r6  s    r^   test_medium1zTestLU.test_medium1  s4    $(#####DH-----r`   c                 n    |                      | j                   |                     | j                   dS r<  )r  r  r(  r6  s    r^   test_medium1_complexzTestLU.test_medium1_complex  s4    $)$$$##DI.....r`   c                 p    t          | j        d          \  }}}t          ||z  |z  | j                   d S )NFr   )r   r   r   )r   r  r  r  s       r^   r$  zTestLU.test_check_finite  s<    TV%0001a!!a%!)TV44444r`   c           	         dD ]|}t          j        ddgddgg|          }t          |          \  }}t          |t          j        ddgddgg                     t	          |t          j        ddg                     }d S )NCFrT   r}   r   r:  order)rV   r5   r   r   r   )r   rF  r]   LUPs        r^   test_simple_knownzTestLU.test_simple_known  s     	4 	4E1a&1b'*%888AaLLEB%b"(QFQF3C*D*DEEEq"(Aq6"2"23333		4 	4r`   N)r   r   r   r7  r  r(  r   r   r.  r0  r2  r5  r7  r:  r=  r?  r$  rI  r   r`   r^   r	  r	    s        > > >00 0 0' ' '" " "# # #" " "# # #0 0 00 0 01 1 11 1 1
. . .
/ / /
5 5 54 4 4 4 4r`   r	  c                       e Zd ZdZd ZdS )TestLUSinglez0LU testers for single precision, real and doublec                 
   t                               |            | j                            t                    | _        | j                            t                    | _        | j                            t                    | _        | j                            t                    | _        | j	                            t                    | _	        | j	                            t                    | _
        | j                            t                    | _        | j                            t                    | _        | j                            t                    | _        | j                            t                    | _        d S r4  )r	  r7  r   rZ   r=   r  r>   r   r  r  r  r  r  r  r  r6  s    r^   r7  zTestLUSingle.setup_method  s    D!!!w'''..++w'''..++Z&&w//
j''	22Z&&w//
j''	22:$$W--J%%i00			r`   N)r   r   r   __doc__r7  r   r`   r^   rK  rK    s)        ::1 1 1 1 1r`   rK  c                        e Zd Zd Zd Zd ZdS )TestLUSolvec                 $    t          d           d S r  r  r6  s    r^   r7  zTestLUSolve.setup_method  r  r`   c                     t          d          }t          d          }dD ]W}t          j        ||          }t          ||          }t	          |          }t          ||          }t          ||           Xd S )Nr9  r9  r9  rB  rE  )rM   rV   r5   r   r   r   r   )r   a0r   rF  r   x1lu_ax2s           r^   test_luzTestLUSolve.test_lu  s    H5MM 	. 	.E5)))Aq!BQ<<D$""B%b"----	. 	.r`   c                     t          d          }t          d          }t          ||          }t          |d          }t          ||d          }t	          ||           d S )NrR  rS  Fr   )rM   r   r   r   r   )r   r   r   rU  rV  rW  s         r^   r$  zTestLUSolve.test_check_finite)  sc    85MM1a[[///dAE222!"b)))))r`   N)r   r   r   r7  rX  r$  r   r`   r^   rO  rO    sA          	. 	. 	.* * * * *r`   rO  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                            e d          ej        j        d                         ZdS )TestSVD_GESDDc                 2    d| _         t          d           d S )Ngesddr!  r  rL   r6  s    r^   r7  zTestSVD_GESDD.setup_method3      $T




r`   c                     t          t          t          dggd           t          t          t          dggd           d S )Nr:  r  r  )r'  r   r   r(  r6  s    r^   r  zTestSVD_GESDD.test_degenerate7  s>    itfB????j#vUCCCCC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  |           d S )Nr   r}   r  r   r   TFfull_matricesr  r   r   r   r  r   rY   rH   r;   rB   rI   charr   r   r   r   re  r  svhsigmar   s           r^   r   zTestSVD_GESDD.test_simple;  s    YY


III.* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	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  |           d S )Nr   r   rc  rd  r   r   rf  rh  s           r^   test_simple_singularz"TestSVD_GESDD.test_simple_singularG  s    YY			999-* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	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  |           d S )Nr   r  rc  rd  r   r   r  r   rY   rH   rB   r;   rI   rg  r   r   rh  s           r^   test_simple_underdetz"TestSVD_GESDD.test_simple_underdetS  s    YY			"* 	9 	9M1M)-);= = =HAq"%acAgs171:???171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	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  |           d S )	Nr}   rT   r  r   r   rc  rd  r   ro  rh  s           r^   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet^  s   VaVaV$* 	9 	9M1M)-);= = =HAq"%acAgs171:???%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r`   c           
      h   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  |           d S )Nr  r   r   rc  rd  r}   r   )r   rM   r   r  r   rY   rH   rB   r;   rI   rg  r   )
r   r[   mr   r   re  r  ri  rj  rk  s
             r^   test_randomzTestSVD_GESDD.test_randomj  sP   q 
	A 
	AAaVnnfaVnn5 	A 	A%2 A AM"1M151C E  E  EHAq"-acAgs171:GGG-b24iRXa[9I9IJJJ!171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@A	A
	A 
	Ar`   c                 P   g dg dg dg}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  |           d S )Nr   )r}   r  r   r   rc  rd  r}   r   )r   r  r   rX   rY   rH   rB   r;   rI   rg  r   r   rh  s           r^   r   z!TestSVD_GESDD.test_simple_complexy  s   YY


III.* 	9 	9M1M)-);= = =HAq"%affhhj1nc!'!*ooFFF%bggiikB&6BHQK8H8HIII171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	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        |z  t          |j        d                              t          |j        d         |j        d         f|j        j                  }	t          t          |                    D ]}||         |	||f<   t          ||	z  |z  |           ")d S )	Nr  r   r   rc  rS   rd  r}   r   )r   rM   listrB   r   r  r   rX   rY   rH   r;   rI   rg  r   )
r   r[   rt  r   re  r   r  ri  rj  rk  s
             r^   test_random_complexz!TestSVD_GESDD.test_random_complex  s\   q 	A 	AA!. A A !Q..&!Q..9 A AABvd17mm4444A"1M151C E  E  EHAq"-affhhj1n.1!'!*oo? ? ?
 "171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@AA	A 	Ar`   c                 0   g d}t           j                            d           |D ]o}t           j        t           j        t           j        t           j        fD ]>}t          j        j        |                     |          }t          || j
                   ?pd S )N))r   r  )r   2   )<   r  r!  r  )rV   rM   rL   r=   float64r>   
complex128rW   rZ   r   r  )r   sizesszr  r   s        r^   test_crash_1580zTestSVD_GESDD.test_crash_1580  s    ///
	t 	9 	9Bz2:r|R]K 9 9INB'..r22AT%7888889	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  |           d S )Nr   rb  r   F)r   r  r   r   rf  )r   r   r  ri  rj  rk  r   s          r^   r$  zTestSVD_GESDD.test_check_finite  s    YY


III.quD<NOOO1b!!#'3q66222!"$)SVV444qwqz28A;/>>s1vv 	 	AA$E!Q$KK!!e)b.!44444r`   c                 r    t          j        g dg dg dg dg          }t          || j                   d S )N)K}\UU?vWUU?r  ra  ra  ra  )ra  r  r  r  ra  ra  )ra  ra  r  r  r  ra  )ra  ra  ra  r  r  r  r  )rV   r5   r   r  )r   r   s     r^   test_gh_5039zTestSVD_GESDD.test_gh_5039  s^     H============?@ @
 	AT/00000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
           d S )NihB  )free_mbr}   l        r=  r  F)re  r   r:  r   )rP   rV   r;   r=   r   r   )r   r]   r  ri  rj  s        r^   test_large_matrixzTestSVD_GESDD.test_large_matrix  s     	%((((HaZrz222%q...1b!c"""$"U)+S11111r`   N)r   r   r   r7  r  r   rm  rp  rr  ru  r   ry  r  r$  r  r.  r/  skipifrQ   slowr  r   r`   r^   r[  r[  2  s         D D D
9 
9 
9
9 
9 
9	9 	9 	9
9 
9 
9A A A
9 
9 
9A A A&9 9 95 5 51 1 1" [I.FGG[2 2  HG2 2 2r`   r[  c                       e Zd Zd ZdS )TestSVD_GESVDc                 2    d| _         t          d           d S )Ngesvdr!  r^  r6  s    r^   r7  zTestSVD_GESVD.setup_method  r_  r`   N)r   r   r   r7  r   r`   r^   r  r    s#            r`   r  c                   h    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d
S )TestSVDValsc                     g gt          j        d          t          j        d          fD ]3}t          |          }t	          |t          j        d                     4d S )N)rT   r   )r   r   r   )rV   r   r7   r   r   r   r   ri  s      r^   
test_emptyzTestSVDVals.test_empty  s\    rx''8 	) 	)A

ABHQKK((((	) 	)r`   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nr   r   r   r   r}   rT   r   r   r   r  s      r^   r   zTestSVDVals.test_simple  sy    YY			999-AJJA!!!$$$$!$$$$%%%%%r`   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr   r  rT   r   r}   r  r  s      r^   rp  z TestSVDVals.test_simple_underdet  sW    YY			"AJJA!!!r`   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr}   rT   r  r   r   r   r  r  s      r^   rr  zTestSVDVals.test_simple_overdet  s]    VaVaV$AJJA!!!r`   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nr   )r}   r  r  r   r   r   r}   rT   r  r  s      r^   r   zTestSVDVals.test_simple_complex  sy    YYYYY/AJJA!!!$$$$!$$$$%%%%%r`   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr   )r  r  r   rT   r   r}   r  r  s      r^   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complex  sW    YY


#AJJA!!!r`   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr}   rT   r  r   r  r   r  r  s      r^   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complex  s]    VaVb!W%AJJA!!!r`   c                     g dg dg dg}t          |d          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )	Nr   r   Fr   r   r   r}   rT   r  r  s      r^   r$  zTestSVDVals.test_check_finite  s    YY			999-AE***A!!!$$$$!$$$$%%%%%r`   c                     t           j                            d           t           j                            dd          }t	          |           d S )Nr!  i  i
  )rV   rM   rL   rW   r   r   r   s     r^   test_crash_2609zTestSVDVals.test_crash_2609  s:    
	tINN4&&




r`   N)r   r   r   r  r   rp  rr  r   r  r  r$  r.  r/  r  r  r   r`   r^   r  r    s        ) ) )
& & &    & & &    & & & [    r`   r  c                       e Zd Zd ZdS )TestDiagSVDc                 Z    t          t          g ddd          g dg dg dg           d S )Nr}   r   r   r   r  )r   r   r6  s    r^   r   zTestDiagSVD.test_simple  sK    !')))Q":":#,99iii"C	E 	E 	E 	E 	Er`   N)r   r   r   r   r   r`   r^   r  r    s(        E E E E Er`   r  c                   L   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z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 Z7d6S )7TestQRc                 $    t          d           d S r  r  r6  s    r^   r7  zTestQR.setup_method  r  r`   c                     g dg dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S Nr  rT   r   rT   r   r   r   r   r   r   r   r   rY   rH   r   r   qrs       r^   r   zTestQR.test_simple  s_    YY			999-!uu1!!#'3q66222!!a%+++++r`   c                    g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          ||           t          |t          d          d          \  }}t          ||           d S )Nr  r  r  r   r   r   r   r   r   rH   r   r   r  r  cqcr2s          r^   test_simple_leftzTestQR.test_simple_left  s    YY			999-!uu1II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          ||           d S )Nr  r  r  r   r   r  r  s          r^   test_simple_rightzTestQR.test_simple_right"  s    YY			999-!uu1IIQ""B!!a%,,,!!R(((As1vv&&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          ||           d S )	Nr  r  r  Tpivotingr}   r   r   
rV   rE   r   rX  r6   r   r   r   rY   rH   r   r   r  r  r  r   q2r  s           r^   test_simple_pivotingzTestQR.test_simple_pivoting,  s    J			999iii899Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r`   c                     g dg dg dg}t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )Nr  r  r  Tr  r   r   r   r   r   r   r   r  r  jpvtr  r  s          r^   test_simple_left_pivotingz TestQR.test_simple_left_pivoting7  sn    YY			999-D)))
1dII!!Q55At!!a%,,,,,r`   c                     g dg dg dg}t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )Nr  r  r  Tr  r   r  r  s          r^   test_simple_right_pivotingz!TestQR.test_simple_right_pivoting>  so    YY			999-D)))
1dII!!Q666At!!a%,,,,,r`   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )Nr  r  rT   r  r  s       r^   test_simple_trapzTestQR.test_simple_trapE  Y    YY			"!uu1!!#'3q6622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          ||           d S )Nr  r  Tr  r}   r   rT   r  r  s           r^   test_simple_trap_pivotingz TestQR.test_simple_trap_pivotingK  s    J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r`   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S Nr  rT   r   r   r   r  r  s       r^   test_simple_tallzTestQR.test_simple_tallV  s_    VaVaV$!uu1!!#'3q6622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          ||           d S )
Nr  rT   r   r   r   Tr  r}   r   r  r  s           r^   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting]  s    JAAA/00Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111Aaaa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	           d S )
Nr  rT   r   r   r   economicmoder   rT   r  r   r   rY   rH   r   rB   r  s       r^   test_simple_tall_ezTestQR.test_simple_tall_ei  s    VaVaV$!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%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          ||           d S )Nr  rT   r   r   r   Tr  r  r  r}   r   r  r  r  s           r^   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivotingr  s    JAAA/00QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadG*---B!!R(((!!R(((((r`   c                    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          ||           d S )Nr  rT   r   r   r   r  r  r}   r   r}   rT   r   Toverwrite_cr   r   r   r5   rH   r  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00As1vvv..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          ||           d S )Nr  rT   r   r   r   r  Tr  r  r}   r   )r   r   r   r   rH   )r   r   r  r  r  r  r  kpvts           r^   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivoting  s    VaVaV$
T:::
1dF!!Q55At4&&&!!a%,,,!!SVVVT::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          ||           d S )	Nr  rT   r   r   r   r  r  r   r  r   r   r  r  r  cqr  s          r^   test_simple_tall_rightzTestQR.test_simple_tall_right  s    VaVaV$!*%%%1IIQ""B!!a%,,,!!R(((As1vv&&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          ||           d S )Nr  rT   r   r   r   Tr  r  r   r  r  r   r   r  r  r  r  r  s          r^   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivoting  s    VaVaV$Dz:::
1dII!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r`   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d           d S )Nr  rT   r   r  rT   r  rT   r   r  r  s       r^   test_simple_fatzTestQR.test_simple_fat  s}    YY			"!uu1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r`   c                 V   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          ||           d S )
Nr  r  Tr  r}   r   rT   r  r  rV   rE   r   rX  r6   r   r   r   rY   rH   r   rB   r  s           r^   test_simple_fat_pivotingzTestQR.test_simple_fat_pivoting  s   J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%Aaaa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           d S )Nr  rT   r   r   r  r  rT   r  r  r  r  s       r^   test_simple_fat_ezTestQR.test_simple_fat_e  s    YY			"!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%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          ||           d S )Nr  r  Tr  r  r}   r   rT   r  r  r  r  r  s           r^   test_simple_fat_e_pivotingz!TestQR.test_simple_fat_e_pivoting  s   J			999-..QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%Aaaa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          ||           d S )Nr  r  r  r  r}   rT   r   r  r  s          r^   test_simple_fat_leftzTestQR.test_simple_fat_left  s    YY			"!*%%%1FQ6**B!!a%,,,!!R(((As1vvv..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          ||           d S )	Nr  r  r  Tr  r}   rT   r   r  r  s          r^   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting  s    YY			"
T:::
1dF!!Q55At!!a%,,,!!SVVVT::At!"a(((((r`   c                    g dg dg}t          |d          \  }}ddg}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )Nr  r  r  r  r}   rT   r  r  s          r^   test_simple_fat_rightzTestQR.test_simple_fat_right  s    YY			"!*%%%1FQ""B!!a%,,,!!R(((As1vv&&A!"a(((((r`   c                    g dg dg}t          |dd          \  }}}ddg}t          ||d          \  }}}t          ||z  |           t          |t          d          d          \  }}}t          ||           d S )	Nr  r  Tr  r  r}   rT   r  r  r  s          r^   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivoting  s    YY			"Dz:::
1dF!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r`   c                     g dg dg dg}t          |          \  }}t          |                                j        |z  t	          d                     t          ||z  |           d S Nr         @      @r   r   rT   y       @      @r   rT   ra   r   )r   r   rX   rY   rH   r  s       r^   r   zTestQR.test_simple_complex  sg    \\<<<3!uu1!!&&((*q.#a&&999!!a%+++++r`   c                     g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          |t          d          d          \  }}t          ||           d S )Nr  r  r  r}   rT   r  r   r   r  r   r   r  r  r  r  s         r^   test_simple_complex_leftzTestQR.test_simple_complex_left  s    \\<<<3!uu1LLAq&))A!!a%,,,As1vvv..A!!R(((((r`   c                     g dg dg dg}t          |          \  }}g d}t          ||          \  }}t          ||z  |           t          |t          d                    \  }}t          ||           d S )Nr  r  r  r	  r   r  r
  s         r^   test_simple_complex_rightz TestQR.test_simple_complex_right  s    \\<<<3!uu1LLAq!!A!!a%,,,As1vv&&A!!R(((((r`   c                    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          ||           d S )Nr  y       @      @rT   r   y      @      @r   r  r  r}          @       @r   r  Tr  r  r  s          r^   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_left  s    YAq	*!*%%%1IQ6**B!!a%,,,!!R((()))Q6t<<<B!!ae)R000As1vvv..A!"a(((((r`   c                     g dg dg dg}t          |          \  }}g d}t          ||dd          \  }}t          |                                |z  |           d S )Nr  r  r  r	  r   T	conjugater   r   r   rX   r
  s         r^   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugate!  sn    \\<<<3!uu1LLAq&D999A!!&&((Q,33333r`   c                     ddgddgddgg}t          |d          \  }}ddg}t          ||d	d
          \  }}t          |                                |z  |           d S )Nr   r  r   r  rT   r  r  r}   r   Tr  r  r
  s         r^   'test_simple_complex_tall_left_conjugatez.TestQR.test_simple_complex_tall_left_conjugate(  su    YD	Aq6*!*%%%1IAq&D999A!!&&((Q,33333r`   c                     g dg dg dg}t          |          \  }}t          j        g d          }t          ||d          \  }}t	          ||                                z  |           d S )Nr  r  r  r	  Tr  )r   rV   r5   r   r   rX   r
  s         r^   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate/  sv    \\<<<3!uu1H\\\""AqD111A!!affhh,33333r`   c                 "   t          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          ||           d S )	Nr  r  r  Tr  r}   r   r   )r5   r   rX  r6   r   rV   r   r   rX   rY   rH   r  s           r^   test_simple_complex_pivotingz#TestQR.test_simple_complex_pivoting6  s    <<<yyy9::Q&&&1aQLLqu#2#''(((!!&&((*q.#a&&999!!a%111a4111AaaadGB!!R(((!!R(((((r`   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )Nr  r  r  Tr  r	  r   r5   r   r   r   r  s          r^   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivotingA  sv    <<<yyy9::D)))
1dLL!!Q55At!!a%,,,,,r`   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )Nr  r  r  Tr  r	  r  r  s          r^   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivotingH  sw    <<<yyy9::D)))
1dLL!!Q666At!!a%,,,,,r`   c                     d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S Nr  rT   r   rM   r   r   rY   rH   r   r[   r  r   r  r  s         r^   ru  zTestQR.test_randomO  sw    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	0r`   c                 D   d}t          d          D ]}t          ||g          }t          |          \  }}t          |g          }t          ||d          \  }}t	          ||z  |           t          |t          |          d          \  }}t	          ||           d S )Nr  rT   r   r   rM   r   r   r   rH   r   r[   r  r   r  r  r  r  s           r^   test_random_leftzTestQR.test_random_leftW  s    q 	- 	-A1vAa55DAqsA1f--EB%a!eR0003q66622EB%a,,,,	- 	-r`   c                 @   d}t          d          D ]}t          ||g          }t          |          \  }}t          |g          }t          ||          \  }}t	          ||z  |           t          |t          |                    \  }}t	          ||           d S r"  r&  r   r[   r  r   r  r  r  r  s           r^   test_random_rightzTestQR.test_random_rightb  s    q 	- 	-A1vAa55DAqsA1%%EB%a!eR0003q66**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          ||	           d S )Nr  rT   Tr  r}   r   r   rM   r   rX  r6   r   rV   r   r   rY   rH   
r   r[   r  r   r  r  r  r   r  r  s
             r^   test_random_pivotingzTestQR.test_random_pivotingm  s   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r`   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S N   r  rT   r#  r   rt  r[   r  r   r  r  s          r^   test_random_tallzTestQR.test_random_tallz  s|    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	0r`   c                 L   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |g          }t          ||d          \  }}t	          ||z  |           t          |t          |          d          \  }}t	          ||           d S )Nr2  r  rT   r  r  r   r&  )	r   rt  r[   r  r   r  r  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003q66622EB%b!,,,,	- 	-r`   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |g          }t          ||          \  }}t	          ||z  |           t          |t          |                    \  }}t	          ||           d S Nr2  r  rT   r  r  r&  )	r   rt  r[   r  r   r  r  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003q66**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          ||
           d S )Nr2  r  rT   Tr  r}   r   r-  r   rt  r[   r  r   r  r  r  r   r  r  s              r^   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s	   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r`   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |j        |z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S r8  )r   rM   r   r   rY   rH   r   rB   r3  s          r^   test_random_tall_ezTestQR.test_random_tall_e  s    q 	* 	*A1vAaj)))DAq%acAgs1vv66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          ||
           +d S )
Nr2  r  rT   Tr  r  r}   r   r  )r   rM   r   rX  r6   r   rV   r   r   rY   rH   r   rB   r;  s              r^   test_random_tall_e_pivotingz"TestQR.test_random_tall_e_pivoting  s>   q 	- 	-A1vAT
;;;GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW5551a&)))1a&)))!!!Q$j111FB%a,,,%a,,,,	- 	-r`   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S Nr  r2  rT   r#  r3  s          r^   test_random_trapzTestQR.test_random_trap  s|    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	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          ||
           d S )Nr  r2  rT   Tr  r}   r   r-  r;  s              r^   test_random_trap_pivotingz TestQR.test_random_trap_pivoting  s	   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r`   c                 2   d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          |                                j        |z  t          |                     t          ||z  |           d S Nr  rT   rS   )r   rM   r   r   rX   rY   rH   r$  s         r^   ry  zTestQR.test_random_complex  s    q 	0 	0A1vr&!Q..00Aa55DAq%affhhj1nc!ff===%a!eQ////		0 	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	          ||           d S )Nr  rT   rS   r   r&  r'  s           r^   test_random_complex_leftzTestQR.test_random_complex_left  s    q 	- 	-A1vr&!Q..00Aa55DAqsBvqc{{N*A1f--EB%a!eR0003q6662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	          ||           d S rG  r&  r*  s           r^   test_random_complex_rightz TestQR.test_random_complex_right  s    q 	- 	-A1vr&!Q..00Aa55DAqsBvqc{{N*A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r`   c           	      j   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
        |z  t          |                     t          ||z  |d d |f                    t          |d d |f                   \  }}	t          ||           t          ||	           !d S )Nr  rT   rS   Tr  r}   r   )r   rM   r   rX  r6   r   rV   r   r   rX   rY   rH   r.  s
             r^   test_random_complex_pivotingz#TestQR.test_random_complex_pivoting  s    q 		- 		-A1vr&!Q..00AT***GAq!DGGABF1QRR5AcrcF?++,,,%affhhj1nc!ff===%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r`   c                     g dg dg dg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           d S Nr  r  r  Fr   r   r  r  s       r^   r$  zTestQR.test_check_finite  sf    YY			999-!%(((1!!#'3q6622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           d S )Nr  r  r  )lworkr   r9  r   rQ  r   rT   )r   r   r'  	Exception)
r   r   r  r  r  r  q3r3q4r4s
             r^   
test_lworkzTestQR.test_lwork  s   YY			999-!4   1 AQB!"a(((!"a((( ARB!"a(((!"a((( ARB!"a(((!"a((( 	iaTGQ<888iaTGQ<88888r`   N)8r   r   r   r7  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   ru  r(  r+  r/  r4  r6  r9  r<  r>  r@  rC  rE  ry  rI  rK  rM  r$  rW  r   r`   r^   r  r    s/         , , ,) ) )) ) )	) 	) 	)- - -- - -, , ,	) 	) 	), , ,
) 
) 
)& & &
) 
) 
)) ) )) ) )) ) )) ) )& & &) ) )& & &) ) )) ) )) ) )) ) )) ) ), , ,) ) )) ) )) ) )4 4 44 4 44 4 4	) 	) 	)- - -- - -0 0 0	- 	- 	-	- 	- 	-- - -0 0 0- - -- - -- - -
* 
* 
*- - -"0 0 0- - -0 0 0	- 	- 	-	- 	- 	-- - -, , ,9 9 9 9 9r`   r  c                   b    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S )TestRQc                 $    t          d           d S r  r  r6  s    r^   r7  zTestRQ.setup_method-  r  r`   c                     g dg dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S r  r   r   rY   rH   r   r   r  r  s       r^   r   zTestRQ.test_simple0  s_    YY			999-!uu1!!ac'3q66222!!a%+++++r`   c                     g dg dg dg}t          |          \  }}t          |d          }t          ||           d S )Nr  r  r  r  r  )r   r   )r   r   r  r  r  s        r^   test_rzTestRQ.test_r6  sN    YY			999-!uu1___!!R(((((r`   c                     d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S r"  r   rM   r   r   rY   rH   r   r[   r  r   r  r  s         r^   ru  zTestRQ.test_random<  sw    q 	0 	0A1vAa55DAq%a!#gs1vv666%a!eQ////		0 	0r`   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )Nr  r  r   r\  r]  s       r^   r  zTestRQ.test_simple_trapD  r  r`   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S r  r\  r]  s       r^   r  zTestRQ.test_simple_tallJ  s_    VaVaV$!uu1!!#'3q66222!!a%+++++r`   c                     g dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S )Nr  r  r   r\  r]  s       r^   r  zTestRQ.test_simple_fatP  sY    YY			"!uu1!!ac'3q66222!!a%+++++r`   c                     g dg dg dg}t          |          \  }}t          ||                                j        z  t	          d                     t          ||z  |           d S r  )r   r   rX   rY   rH   r]  s       r^   r   zTestRQ.test_simple_complexV  sg    \\<<<3!uu1!!affhhj.#a&&999!!a%+++++r`   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S r1  ra  r   rt  r[   r  r   r  r  s          r^   r4  zTestRQ.test_random_tall\  |    q 	0 	0A1vAa55DAq%a!#gs1vv666%a!eQ////		0 	0r`   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S rB  ra  rh  s          r^   rC  zTestRQ.test_random_trape  ri  r`   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          ||j        z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S )Nr  r2  rT   r  r  )r   rM   r   r   rY   rH   r   rB   rh  s          r^   test_random_trap_economicz TestRQ.test_random_trap_economicn  s    q 	* 	*A1vAaj)))DAq%a!#gs1vv666%a!eQ///1a&)))1a&))))	* 	*r`   c                 2   d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          ||                                j        z  t          |                     t          ||z  |           d S rG  )r   rM   r   r   rX   rY   rH   rb  s         r^   ry  zTestRQ.test_random_complexy  s    q 	0 	0A1vr&!Q..00Aa55DAq%a!&&((*nc!ff===%a!eQ////		0 	0r`   c                    d}d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |d          \  }}t          ||                                j        z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S )Nr  r2  rT   rS   r  r  )	r   rM   r   r   rX   rY   rH   r   rB   rh  s          r^   test_random_complex_economicz#TestRQ.test_random_complex_economic  s    q 	* 	*A1vr&!Q..00Aaj)))DAq%a!&&((*nc!ff===%a!eQ///1a&)))1a&))))	* 	*r`   c                     g dg dg dg}t          |d          \  }}t          ||j        z  t          d                     t          ||z  |           d S rO  r\  r]  s       r^   r$  zTestRQ.test_check_finite  sf    YY			999-!%(((1!!ac'3q66222!!a%+++++r`   N)r   r   r   r7  r   r_  ru  r  r  r  r   r4  rC  rl  ry  ro  r$  r   r`   r^   rY  rY  +  s          , , ,) ) )0 0 0, , ,, , ,, , ,, , ,0 0 00 0 0	* 	* 	*0 0 0	* 	* 	*, , , , ,r`   rY  c                      e Zd Zd Zd Ze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dS )	TestSchurc                    t          ||z  |                                j        z  |||d           t          ||                                j        z  t          j        t          |                    z
  dd|d           d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rX   rY   rV   rH   r   )r   r   tr  r   r   s         r^   check_schurzTestSchur.check_schur  s    A
*ADt H	J 	J 	J 	J 	AFFHHJA7 2	4 	4 	4 	4 	4 	4r`   c           	         g dg dg dg}t          |          \  }}|                     |||dd           t          |d          \  }}t          t          j        t          t          |                              o-t          j        t          t          |                                         |                     |||dd           t          ||          \  }}|                     |||dd           d S )Nr  r  r   r  r9  r   r   +=+<r   r   rK  )r   ru  r   rV   anyr?   rA   r   )r   r   rt  r  tczctc2zc2s           r^   r   zTestSchur.test_simple  s    ZZJJJ/Qxx1Aqu5999q)$$BuYr]]++,,Mimm8L8L1M1MNNNBU;;;2r??SC5u=====r`   zsort, expected_diaglhprT         r~   rhpiucoucc                     | dk    S )Nra  r   )rq   s    r^   <lambda>zTestSchur.<lambda>  s
    AH r`   c                     g dg dg dg dg}t          ||          \  }}}|                     |||dd           t          t          j        |          |d	
           t          d|           d S )N      @r   r:  r;  g      g      r;  r:  r,        @      g      @r  r  r<        @rC   ry  rz  r{  -q=r   rT   )r   ru  r   rV   r6   r   )r   rC   expected_diagr   rt  r  sdims          r^   	test_sortzTestSchur.test_sort  s     """! 14(((
1dAqu5999

M>>>>Qr`   c                     g dg dg dg dg}t          t          t          |d           t          t          t          |d           d S )Nr  r  r  r  unsupportedr  r}   )r'  r(  r   r  s     r^   test_sort_errorszTestSchur.test_sort_errors  sc    """! 	j%????j%333333r`   c                     g dg dg dg}t          |d          \  }}t          ||z  |                                j        z  |           d S )Nrw  r  rx  Fr   )r   r   rX   rY   )r   r   rt  r  s       r^   r$  zTestSchur.test_check_finite  sY    ZZJJJ/QU+++1!!a%!&&((*"4a88888r`   N)r   r   r   ru  r   r.  r/  r  rV   r@   r  r  r$  r   r`   r^   rr  rr    sO       4 4 4> > > [
7271::+tWRWQZZ5	6
'"'!**cGBGAJJ;5	6
$WRWQZZ'"'!**5	6
'"'!**wrwqzzk45	6

wrwqzz3TB	C		E 
 
 
4 4 49 9 9 9 9r`   rr  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestHessenbergc                     g dg dg dg}g dg dg dg}t          |d          \  }}t          |j        |z  |z  |           t          ||d	
           d S )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@r}   calc_qr  decimalr   r   rY   r   r   h1r   r  s        r^   r   zTestHessenberg.test_simple  s    __^^ .--...!!!# !A&&&1!!#'A+q111!!R333333r`   c                     g dg dg dg}t          |d          \  }}t          |                                j        |z  |z  |           d S )Nr  )r  y             f@r  )y             ;r  r  r}   r  )r   r   rX   rY   r   r   r   r  s       r^   r   z"TestHessenberg.test_simple_complex  sc    __ !A&&&1!!&&((*q.1"4a88888r`   c                     g dg dg dg dg dg dg dg}t          |d	          \  }}t          |j        |z  |z  |           d S )
N)r}   rT   r   r  r   r   ra   )r   rT   r   r  r   ra   rT   )r   rT   rT   r   r   r   rT   )r   r   rT   r  r   r   rT   )r   r   r}   rT   r   r}   rT   )r   r}   rT   r   r   r}   r   )r   r   r   r   r   r}   rT   r}   r  r  r  s       r^   r.  zTestHessenberg.test_simple2  s    """""""""""""""""""""$ !A&&&1!!#'A+q11111r`   c                     t          j        d          }d|d<   t          |d          \  }}t          |j        |z  |z  |           d S )Nr   rT   )r   r   r}   r  )rV   rH   r   r   rY   r  s       r^   test_simple3zTestHessenberg.test_simple3  sN    F1II%!A&&&1!!#'A+q11111r`   c                     d}t          d          D ]B}t          ||g          }t          |d          \  }}t          |j        |z  |z  |           Cd S )Nr  rT   r}   r  )r   rM   r   r   rY   r   r[   r  r   r   r  s         r^   ru  zTestHessenberg.test_random  sh    q 	6 	6A1vAa***DAq%acAgk15555	6 	6r`   c                     d}t          d          D ]i}t          ||g          dt          ||g          z  z   }t          |d          \  }}t          |                                j        |z  |z  |           jd S )Nr  rT   rS   r}   r  )r   rM   r   r   rX   rY   r  s         r^   ry  z"TestHessenberg.test_random_complex  s    q 	= 	=A1vr&!Q..00Aa***DAq%affhhj1nq&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
           d S )Nr  r  r  r  r  r  r}   F)r  r   r  r  r  r  s        r^   r$  z TestHessenberg.test_check_finite  s    __^^ .--...!!!# !AE:::1!!#'A+q111!!R33333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          ||           d S )
NrT   r}   ra   r  r  y       @      r   y      @      @y      (@       )r   r   rV   rH   )r   r   r   r  r   h2r  s          r^   test_2x2zTestHessenberg.test_2x2  s    VaW!A&&&1!!RVAYY///!!Q'''D\D%=)Aa(((B!"bfQii000!"a(((((r`   N)r   r   r   r   r   r.  r  ru  ry  r$  r  r   r`   r^   r  r    s        	4 	4 	49 9 9	2 	2 	22 2 26 6 6= = =	4 	4 	4
) 
) 
) 
) 
)r`   r  c                       e Zd Zd Zej                            ej        dk    d          d             Z	d Z
d Zd Zd	 Zd
 Zd ZdS )TestQZc                 $    t          d           d S Ni90  r  r6  s    r^   r7  zTestQZ.setup_method      Ur`   darwinz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   c                 L   d}t          ||g                              t                    }t          ||g                              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                         d S )Nr   r  r   )rM   rZ   r=   r   r   rY   rH   r   rV   r   r6   r   r[   r]   r   AABBQr  s           r^   test_qz_singlezTestQZ.test_qz_single  s     Aq6NN!!'**Aq6NN!!'**!QxxB1!!b&13,1====!!b&13,1====!!ac'3q661====!!ac'3q661====tBxx1}%%&&&&&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                         d S )Nr   r   	rM   r   r   rY   rH   r   rV   r   r6   r  s           r^   test_qz_doublezTestQZ.test_qz_double&  s    Aq6NNAq6NN!QxxB1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r`   c                 .   d}t          ||g          dt          ||g          z  z   }t          ||g          dt          ||g          z  z   }t          ||          \  }}}}t          ||z  |                                j        z  |           t          ||z  |                                j        z  |           t          ||                                j        z  t          |                     t          ||                                j        z  t          |                     t          t          j        t          |          dk                         t          t          j        t          |          j
        dk                         d S )Nr   rS   r   )rM   r   r   rX   rY   rH   r   rV   r   r6   ri   r  s           r^   test_qz_complexzTestQZ.test_qz_complex1  s=   Aq6NNR1v..Aq6NNR1v..!QxxB1!!b&16688:"5q999!!b&16688:"5q999!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&tBxx})**+++++r`   c                    d}t          ||g          dt          ||g          z  z                       t                    }t          ||g          dt          ||g          z  z                       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                         t          t          j
        t          |          j        dk                         d S )Nr   rS   r  r   )rM   rZ   r>   r   r   rX   rY   rH   r   rV   r   r6   ri   r  s           r^   test_qz_complex64zTestQZ.test_qz_complex64=  sm   QF^^bA//77	BBQF^^bA//77	BB!QxxB1!!b&16688:"5q!DDDD!!b&16688:"5q!DDDD!!affhhj.#a&&!DDDD!!affhhj.#a&&!DDDDtBxx1}%%&&&tBxx})**+++++r`   c                    d}t          ||g          }t          ||g          }t          ||d          \  }}}}||z  |                                j        z  }t	          |j        |           t	          |j        d           ||z  |                                j        z  }	t	          |	j        |           t	          |	j        d           t	          ||                                j        z  t          |                     t	          ||                                j        z  t          |                     t          t          j
        t          |          dk                         d S )Nr   rK  )outputr   )rM   r   rX   rY   r   rh   ri   rH   r   rV   r   r6   )
r   r[   r]   r   r  r  r  r  aabbs
             r^   test_qz_double_complexzTestQZ.test_qz_double_complexI  s)   Aq6NNAq6NN!Qy111B1Vaffhhj !"'1---!"'1---Vaffhhj !"'1---!"'1---!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&&&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	 
           d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r       Er  )皙@r        Gr  )r:  r:  r<  r:  )r:  r   g      r  )r:  rc   r  r:  )r  r   r  r  c                     |dk    S )Nr   r   )ro   aibetas      r^   r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>p  s
    bAg r`   r  )	rV   r5   r'  r(  r   r   r   rY   rX  )r   r]   r   r  r  r  r  r  s           r^   test_qz_double_sortzTestQZ.test_qz_double_sortX  s     H------,,,,,,. / /
 H++++++++++++- . .
 	j"a1M1MNNNN	F 	F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                         d S )Nr   Fr   r   r  r  s           r^   r$  zTestQZ.test_check_finite  s    Aq6NNAq6NN!QU333B1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r`   N)r   r   r   r7  r.  r/  r0  sysplatformr  r  r  r  r  r  r$  r   r`   r^   r  r    s           [s|x/I  K K	' 	'K K	'	' 	' 	'
, 
, 
,
, 
, 
,' ' '5F 5F 5FF	' 	' 	' 	' 	'r`   r  c                 0    t          j        |           | z  S r4  )rV   rD   )Xs    r^   	_make_posr    s    71::a<r`   c                   f    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dS )	TestOrdQZc                 6   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| _        d S )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              )rS   y333333@y              y      @      )r  r  r  r  r  )r  r  r  r  )r  g      :@r  r  )r}   rT   r}   )r}   r   r  )r}   r   r   )r}   r   r  r  )r  r:  r   r   )r  r  rc         @)r  r  r:  r   )ra  r         @r  )r        $@r  r  )r  r  rc   r,  )r,  r:  r  r  )r  r:  r  r  rT   r   r}   )rV   r5   rH   r6   r]   r   )
clsA1B1A2B2A3B3A4B4A5s
             r^   r  zTestOrdQZ.setup_class  s    X $ $ $& & &% % %' ' '( ) ) XDDDDDDDDDDDDF G G X///.........0 1 1
 X}}}$}}$}}$}}& ' ' X'''''''''''') * * X)))''''''''') * * VAYYWaV__ WaV__RR$RR$r`   c                     t          j        d          5  fdt          | j        | j                  D             }d d d            n# 1 swxY w Y   t          |          S )Nraiser  c                 :    g | ]\  }}t          ||           S )r  )r    ).0AiBirC   s      r^   
<listcomp>z'TestOrdQZ.qz_decomp.<locals>.<listcomp>	  s,    NNNB5Rd+++NNNr`   )rV   r  zipr]   r   tuple)r   rC   rets    ` r^   	qz_decompzTestOrdQZ.qz_decomp	  s    [W%%% 	O 	ONNNN#dfdf:M:MNNNC	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	OSzzs   'A

AAc
           	      *   t          j        |j         }
t          ||j                                        z  |
           t          |	|	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k    r|||dz
  f         dk    r||j        d         dz
  k     r||dz   |f         dk    rt          |||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    r2t          |||f         d           t          |||f         d           #||         dk    rt          |||f         d           It          |||f         |||f         z  ||         ||         z             }t          |          }d}t          |j        d                   D ]H} |t          j        ||         g          t          j        ||         g                    }|s|rJ |}Id S )Nr   r   r   r}   rT   T)rV   rH   rB   r   rY   rX   r   rK   r;   r   r
   ri   r   r   r3   r5   )r   r]   r   rC   r  r  alphar  r  r  Idr   evalsr'  tmpsortfunlastsortcursorts                     r^   checkzTestOrdQZ.check		  s   VQW!!achhjj."555!!achhjj."555!!b&!a%000!!b&!a%000272r??BHRX,>,>???272r??BHRX,>,>???qwqz"" 	M 	MA 1uu1a!e8))28A;?""r!a%(|q'8'8r!AE'1QU7"23R!a%1q58H5IJJq 8=1$$!1a&MEAa!eGnT!AE']2q6;??q!f+C)%55558q==T!W\\ AqD1--- AqD1----!W\\ AqD1----'1a4AqD(958DG;KLLLL"4((qwqz"" 	 	Agbhaz22BHd1gY4G4GHHG  #"""{HH	 	r`   c                     |                      |          }t          || j        | j                  D ]\  }}} | j        |||g|R   d S r4  )r  r  r]   r   r  )r   rC   r  retir  r  s         r^   	check_allzTestOrdQZ.check_all7	  sc    nnT""TVTV44 	, 	,LD"bDJr2t+d+++++	, 	,r`   c                 0    |                      d           d S )Nr  r  r6  s    r^   test_lhpzTestOrdQZ.test_lhp=	      ur`   c                 0    |                      d           d S )Nr  r  r6  s    r^   test_rhpzTestOrdQZ.test_rhp@	  r  r`   c                 0    |                      d           d S )Nr  r  r6  s    r^   test_iuczTestOrdQZ.test_iucC	  r  r`   c                 0    |                      d           d S )Nr  r  r6  s    r^   test_ouczTestOrdQZ.test_oucF	  r  r`   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S Nr=  r   FrV   
empty_likeboolri   rq   r  rd   nonzeros       r^   rC   z TestOrdQZ.test_ref.<locals>.sortK	  M    -...CAvG!CMgJqz171<CLJr`   r  r   rC   s     r^   test_refzTestOrdQZ.test_refI	  +    	 	 	 	tr`   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S r  r  r!  s       r^   rC   z TestOrdQZ.test_cef.<locals>.sortV	  r#  r`   r  r$  s     r^   test_cefzTestOrdQZ.test_cefT	  r&  r`   c                 >   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   d S )Nr}   rT   r  r  )r    r]   r   r  )r   r  s     r^   test_diff_input_typeszTestOrdQZ.test_diff_input_types_	  s    DF1Itvayu555
46!9dfQi55555DF1Itvayu555
46!9dfQi5555555r`   c                 v   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          ||           d S )NrT   r   r~   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   r}   r  )	rV   rH   r6   r   nanr  r    r  r   )r   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5r]   r   expectedr  r  	expectedisortstrexpected_eigvalsr'  r  r  azerobzerorq   s                                 r^   test_sort_explicitzTestOrdQZ.test_sort_explicitf	  s    VAYYWb#YdAY'aY'dAY'aY')	 VAYYWgz*++k>:;nk:;k>:;nk:;=	
 VAYYWaV__c26]+c26]+bfc]+-	 VAYYWb!WdBF^,dBF^,bfd^,.	 WaV__WaXa[)a[)+	 RR RR y)Y	J!$Q8!4!4 		5 		5BI-6 5 5))*/BW*E*E*E'1eT1a!M%((#%6%%- $&F5&5.!!5&M$v,65&	 0!44445		5 		5r`   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r%  r)  r+  r;  r   r`   r^   r  r    s        4% 4% [4%l  
, , ,\, , ,        	 	 		 	 	6 6 6-5 -5 -5 -5 -5r`   r  c                   D    e Zd Zd Zd Zej        j        d             ZdS )TestOrdQZWorkspaceSizec                 $    t          d           d S r  r  r6  s    r^   r7  z#TestOrdQZWorkspaceSize.setup_method	  r  r`   c                    d}t           j        t           j        fD ]^}t          ||f                              |          }t          ||f                              |          }t          ||d d          }_t           j        t           j        fD ]^}t          ||f                              |          }t          ||f                              |          }t          ||d d          }_d S )N   c                     | |k     S r4  r   r  r  s     r^   r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  
    UT\ r`   rh   )rC   r  c                     | |k     S r4  r   rC  s     r^   r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  rD  r`   rK  )rV   r=   r}  rM   rZ   r    r~  r>   )r   rP  ddtyper]   r   r'  s         r^   test_decomposez%TestOrdQZWorkspaceSize.test_decompose	  s     z2:. 	% 	%F1v%%f--A1v%%f--Aa!A!A#% % %AA }bl3 	( 	(F1v%%f--A1v%%f--Aa!A!A&( ( (AA	( 	(r`   c                 .   d}t           j        t           j        t           j        t           j        fD ]c}t          ||f                              |          }t          ||f                              |          }t          ||d          \  }}}}}	}
dd S )NrA  r  r  )rV   r=   r}  r~  r>   rM   rZ   r    )r   rP  rF  r]   r   SrY   r  r  UVs              r^   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc	  s      z2:r}blK 	> 	>F1v%%f--A1v%%f--A&+Aqu&=&=&=#Aq%q!!	> 	>r`   N)	r   r   r   r7  rG  r.  r/  r  rL  r   r`   r^   r>  r>  	  sS          ( ( ($ [> > > > >r`   r>  c                       e Zd Zd ZdS )TestDatacopiedc                    ddl m} t          ddgddgg          }t          |          |                                }|                                } 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          |	                     >d S )Nr   )_datacopiedr}   rT   r   c                       e Zd Z fdZdS )-TestDatacopied.test_datacopied.<locals>.Fake1c                     S r4  r   r)  s    r^   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__	  s    r`   N)r   r   r   rT  r]   s   r^   Fake1rR  	  s.              r`   rV  c                       e Zd Z j        ZdS )-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__rU  s   r^   Fake2rX  	  s        "#"7r`   rZ  FTr   )scipy.linalg._decomprP  rO   rE   tolistr   r   repr)r   rP  r  LM2rV  rZ  F1F2itemstatusarrr]   s               @r^   test_datacopiedzTestDatacopied.test_datacopied	  sV   444444QFQF#$$AJJHHJJVVXX	 	 	 	 	 	 	 	 	 		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 UWWUWWZ!UaY %[2u+E{D 	- 	-LD&$--CS$//!%d- - - - -	- 	-r`   N)r   r   r   re  r   r`   r^   rN  rN  	  s#        - - - - -r`   rN  c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z4Check linalg works with non-aligned memory (float32)i  r=  rT   r  offsetcountrI   rR  Tr!  N)	r<   rV   uint8
frombufferr  r=   rB   r
   rY   r   r  s     r^   test_aligned_mem_floatrm  	  si     	s"(###A 	afQcAA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           d	S )
z4Check linalg works with non-aligned memory (float64)i$  r=  r  r  rg  rR  Tr!  N)	r<   rV   rj  rk  r  rI  rB   r
   rY   rl  s     r^   test_aligned_memrp  	  si    
 	s"(###A 	afQc???AAGtr`   c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z>Check that complex objects don't need to be completely alignediH  r=  r  r  rg  rR  Tr!  N)	r;   rV   rj  rk  r  rK  rB   r
   rY   rl  s     r^   test_aligned_mem_complexrr  	  si     	d"(###A 	afQcAAAAAGtr`   c                 b   t          |          }t          t          |                    D ]}|d d          }t          ||         t          j                  rt	          j        ||         j        ||         j        j	        z  dz   t          j
                  }t	          j        |j        d||         j        ||         j                  }||         j        |_        ||         |d<   |||<    | |i | t          ||         j                  dk    r||         j        ||<    | |i | d S )Nr  r=  r  rg  .r}   )rx  r   r   rw   rV   rG   r;   r   rI   itemsizerj  rk  r  rB   rY   )funcrS  kwargsr   r   r  s         r^   check_lapack_misalignedrw  	  s)   ::D3t99 # #GadBJ'' 	#!A$)AaDJ$779JJJBrwq!	%&qTZ1 1 1BtzBHdBsGAaDD!v1Q4:""tv!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/          |||           d S )Nr9  r=  r  rR  i N  r  rg  Tr!  )overwrite_b)r"  rz  )rV   rH   rI  r<   rB   rj  rk  r  r7   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   rw  )	r  RrI  r   rG  pivru  rS  rv  s	            r^   test_lapack_misalignedr~  
  s+    	rA
	#AAG
	%rx(((A
afQc???AAG
AllGB1$.../qdDT2223!t---.dt4445S	1~t'='='=>QFDTtDDDE1$.../1$.../1$.../qdDFF#qdDT2223tTd3334!t---.!t---.!t5556QD$40001!! 4 4tV$ 	 dF3333%4 4r`   c                   n    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S )TestOverwritec                 `    t          t          dg           t          t          ddg           d S Nr  )rN   r
   r6  s    r^   test_eigzTestOverwrite.test_eig3
  s/    C&***C&&!122222r`   c                 `    t          t          dg           t          t          ddg           d S r  )rN   r   r6  s    r^   	test_eighzTestOverwrite.test_eigh7
  s/    D6(+++D66"233333r`   c                 2    t          t          dg           d S Nr  )rN   r   r6  s    r^   r  zTestOverwrite.test_eig_banded;
      J11111r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_eigvalszTestOverwrite.test_eigvals>
      GfX.....r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_eigvalshzTestOverwrite.test_eigvalshA
  s    Hvh/////r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   r{  z!TestOverwrite.test_eigvals_bandedD
  s    NVH55555r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_hessenbergzTestOverwrite.test_hessenbergG
  r  r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_lu_factorzTestOverwrite.test_lu_factorJ
  s    Ix00000r`   c                     t          j        g dg dg dg          }t          |          t          fddg           d S )Nr   r  )ra   r  r  c                 $    t          |           S r4  )r   )r   xlus    r^   r  z-TestOverwrite.test_lu_solve.<locals>.<lambda>P
  s    hsA&6&6 r`   )r   )rV   r5   r   rN   )r   rq   r  s     @r^   test_lu_solvezTestOverwrite.test_lu_solveM
  sR    HiiiIII677ll6666?????r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   rX  zTestOverwrite.test_luR
      B)))))r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_qrzTestOverwrite.test_qrU
  r  r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_rqzTestOverwrite.test_rqX
  r  r`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   
test_schurzTestOverwrite.test_schur[
  s    EF8,,,,,r`   c                 Z    t          d dgt          j        t          j        g           d S )Nc                 "    t          | d          S )NrK  )r   r   s    r^   r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>_
  s    eAy&9&9 r`   r  )dtypes)rN   rV   r=   r}  r6  s    r^   test_schur_complexz TestOverwrite.test_schur_complex^
  s9    99F8$&J
#;	= 	= 	= 	= 	= 	=r`   c                 V    t          t          dg           t          d dg           d S )Nr  c                 $    t          | d          S )Nr  r  )r   r  s    r^   r  z(TestOverwrite.test_svd.<locals>.<lambda>d
  s    c!7&C&C&C r`   )rN   r   r6  s    r^   test_svdzTestOverwrite.test_svdb
  s0    C&***CCfXNNNNNr`   c                 2    t          t          dg           d S r  )rN   r   r6  s    r^   test_svdvalszTestOverwrite.test_svdvalsf
  r  r`   N)r   r   r   r  r  r  r  r  r{  r  r  r  rX  r  r  r  r  r  r  r   r`   r^   r  r  2
  s
       3 3 34 4 42 2 2/ / /0 0 06 6 62 2 21 1 1@ @ @
* * ** * ** * *- - -= = =O O O/ / / / /r`   r  c                    t          j        | dft                                        |          }t          j        |          j        }d|z  }t          |          }t          |j        | df           t          ||
                                |           t          |j                  }t          |j        d           t          ||
                                |           | dk    r|st           j                            d           t           j                            | d          t           j                            d|           z  }|dt           j                            | d          z  t           j                            d|           z  z   }|                    |          }t          |d	
          }t          |j        | df           t          |d
          }t          |j        | df           d S d S d S )NrT   r=  r  r}   r   rT   r}   r   -C6?MbP?rcondư>r   )rV   r7   rI  rZ   rj   r  r   r   rB   r   meanrY   rM   rL   rW   )r[   rI   skip_bigr  r  tolYs          r^   _check_orthr  j
  s   
Ae$$$++E22A
(5//
C
*CQA1a&!!!Aqvvxxc****QS		A&!!!Aqvvxxc****1uuXu
	qINN1a  29>>!Q#7#77ry~~a+++binnQ.B.BBBHHUOO$QWq!f%%%$QWq%j))))) uuur`   r  z"test only on 64-bit, else too slowc                      d} 	 t          | t          j        d           d S # t          $ r}t	          d          |d }~ww xY w)Ni T)r  z.memory error perhaps caused by orth regression)r  rV   r}  MemoryErrorAssertionError)r[   r  s     r^   test_orth_memory_efficiencyr  
  sb     	AArzD111111   <
 
	s   " 
A<Ac                      t           j        t           j        t           j        t           j        g} g d}t          j        | |          D ]\  }}t          ||           d S )Nr}   rT   r   r9  r  )rV   r=   r}  r>   r~  	itertoolsproductr  )r  r  r  r[   s       r^   	test_orthr  
  s`    j"*blBMBFE"6511  AAr r`   c                  V   t           j                            d           t           j        t           j        t           j        t           j        g} g d}t          j        | |          D ]@\  }}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                            d|dz  z   |          }t          |          }t          |j        ||dz
  |dz  z
  f           t          ||z  d|           |d	k    rt           j                            d           t           j                            |d	          t           j                            d	|          z  }|d
t           j                            |d          z  t           j                            d|          z  z   }|                    |          }t          |d          }t          |j        ||d	z
  f           t          |d          }t          |j        ||dz
  f           Bd S )Nr}   r  rT   r=  r  r   r  r  r   r  r  r  r  r   )rV   rM   rL   r=   r}  r>   r~  r  r  r7   rj   r  r%   r   rB   r   rY   randnrW   rZ   )r  r  r  r[   r  r  r  r  s           r^   test_null_spacer  
  sQ   INN1j"*blBMBFE"6511 . .AGQF"%%%hrllSjqMMQWq!A#h'''Aqs++++qsOOQWf%%%a----IOOA1Ha((qMMQWq!a%!Q$,/000Aqs++++q55INN1	q!$$ry~~a';';;AD29>>!Q///")..A2F2FFFAA1D)))A1a!e*---1D)))A1a!e*---;. .r`   c            	         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           d S )Nr  r   rc   ry  r  r}   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rT   r   r  r  gL0?gĹ-?gyv?r   r  )r   r}   r   )r   r   r}   r  r>  r-  ra  )r"   rI  r   r!   rV   pir;   rB   r5   r'  r(  )Hr]   r   rq   r5  r   r   s          r^   test_subspace_anglesr  
  su   EA	!!!RaR%A	!!!QRR%AOAq))BEBJ<!+;%HHHHOAq))BEBJ<!+;%HHHHV $ $1--rx
/C/C"	$ 	$ 	$ 	$ 	$ 		U	U	U	W	W	W	X	X	X	V	V	V	X	Y 	YA
 !HOAaaa!eHa122h77:H       OAaaaeHa2A2h77:H        HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHa122h77(A        *oqtQ777*oq!A$777*oq"vq999 	)))))))))))	 	 	A
 	)))))))))))	 	 	A
 xq!Q((HOAq))8%@@@@
 A3A
!q!fAOAq))2E::::OAq))2E::::::r`   c                   b    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S )TestCDF2RDFc                 .    t          j        d||          S )Nz...ij,...jk->...ik)rV   einsum)r   r   r   s      r^   matmulzTestCDF2RDF.matmul
  s    y-q!444r`   c                 v    t          |                     ||          |                     ||                     d S r4  )r   r  )r   r   r   rq   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          ||          \  }}|                     |||           d S )Nr   r   )rV   r   r&   r  r   r  r   r   wrr   s         r^   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0real  s[    HVx{{BHV,,1ABb"a(((((r`   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nr}   rT   r   r   rV   r5   r9   r
   r&   r  r  s         r^   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_real  sd    Hq!fq"g&''y}}Q1ABb"a(((((r`   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nr}   rT   r   r  r  s         r^   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complex  sd    Hq!fr1g&''y}}Q1ABb"a(((((r`   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nr   r   r  r  s         r^   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_real  sj    HiiiIII677y}}Q1ABb"a(((((r`   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S Nr   )r   r  r   )r   r  r  r  r  s         r^   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex!  sj    HiiiJJJ788y}}Q1ABb"a(((((r`   c                 D   t          dd          D ]}t          j                            d           t          j                            d||          }t          j                            |          \  }}t          ||          \  }}|                     |||           d S )Nr}   ra   iɚ;r  )	r   rV   rM   rL   rW   r9   r
   r&   r  r   r  r  r   r   r  r   s          r^   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arrays'  s    q! 	- 	-AINN9%%%	sAq))A9==##DAqQ]]FB!!"b!,,,,	- 	-r`   c                    t          dd          D ]p}t          j                            dd||          }t          j                            |          \  }}t          ||          \  }}|                     |||           qd S )Nr}   ra   r9  )r   rV   rM   rW   r9   r
   r&   r  r  s          r^   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays0  s    q! 	- 	-A	r2q!,,A9==##DAqQ]]FB!!"b!,,,,		- 	-r`   c                     t          j        d          t          j        d          }}t          t          t
          ||           d S )Nr   )rT   )rV   r   r5   r'  r(  r&   r   r   r   s      r^   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error8  s5    x||RXd^^1j'1a00000r`   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nr   r   rT   rV   r<   r&  r'  r(  r&   r  s      r^   r*  z!TestCDF2RDF.test_not_square_error<  sE    y||RYq\\11!Q771j'1a00000r`   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           d S r  rV   r5   r9   r
   r'  r(  r&   r   r  r   r   s       r^   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_errorA  sU    HiiiJJJ788y}}Q1j'1a00000r`   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nr   r  r  r  r  s      r^   test_non_associated_errorz%TestCDF2RDF.test_non_associated_errorG  sE    y||RYr]]221a881j'1a00000r`   c                    t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           t          j        g dg dg dgg dg dg dgg          }t           j                            |          \  }}t	          t
          t          ||           d S )Nr   r   )rT   r   y      @      r  r  s       r^   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairsL  s    HiiiLLL9::y}}Q1j'1a000 HYY			<<<0YY			<<<0
   y}}Q1j'1a00000r`   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r*  r  r  r  r   r`   r^   r  r  
  s        5 5 5
 
 
) ) )) ) )) ) )) ) )) ) )- - -- - -1 1 11 1 1
1 1 11 1 1
1 1 1 1 1r`   r  )ra   )F)rM  	__usage__r  r  r  numpyrV   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   r1   scipy.linalg._miscr2   scipy.linalg._decomp_qzr3   scipy.statsr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   numpy.randomrL   rM   scipy.linalg._testutilsrN   scipy.sparse._sputilsrO   scipy._lib._testutilsrP   scipy.linalg.blasrQ   rI  r_   r}  REAL_DTYPESr~  rU   r  rg   r{   r   r   r   r   r2  r  r  r	  rK  rO  r[  r  r  r  r  rY  rr  r  r  r  r  r>  rN  rm  r/  r  machinerp  rr  rw  r0  r~  r  r  r  intprt  r  r  r  r  r  r   r`   r^   <module>r     s`
   	      



    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  * * * * * *N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 $ # # # # # 4 4 4 4 4 4 # # # # # #M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M & % % % % % % % 7 7 7 7 7 7 ( ( ( ( ( ( 3 3 3 3 3 3 ' ' ' ' ' ' (-E     z2:&,.	~	%# # # #"F F F"  4  . . . . . . . .>W- W- W- W- W- W- W- W-tU, U, U, U, U, U, U, U,plF lF lF lF lF lF lF lF^[" [" [" [" [" [" [" ["|Z4 Z4 Z4 Z4 Z4 Z4 Z4 Z4z1 1 1 1 16 1 1 1** * * * * * * *0R2 R2 R2 R2 R2 R2 R2 R2j    M   6 6 6 6 6 6 6 6rE E E E E E E E[9 [9 [9 [9 [9 [9 [9 [9|e, e, e, e, e, e, e, e,P49 49 49 49 49 49 49 49nH) H) H) H) H) H) H) H)Vo' o' o' o' o' o' o' o'd  
G5 G5 G5 G5 G5 G5 G5 G5T >  >  >  >  >  >  >  >F- - - - - - - -6
 
 
 $H$&&)3/  1 1
 
1 1
  # # #$ uL  N N4 4N N4@5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/p* * * *6 HBHRW%%.2?  A A A A   #. #. #.L7; 7; 7;t[1 [1 [1 [1 [1 [1 [1 [1 [1 [1r`   