
    Ug	                    
   d dl Z d dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d d	lm=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d d
lPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW 	 d dlXmYZY n# eZ$ r dZYY nw xY wde[fdZ\ejD        ej]        gZ^ejE        ej_        gZ`e^e`z   Zad Zb G d d          Zc G d d          Zd G d d          Ze G d d          Zf G d d          Zg G d d          Zh G d deh          Ziejj        k                    d           d!             Zl G d" d#          Zm G d$ d%          Zn G d& d'          Zo G d( d)          Zp G d* d+          Zq G d, d-          ZrdxZsZteY(eYd.         d/         d0         ZseYd.         d/         d1         Zt G d2 d3          Zu G d4 d5          Zv G d6 d7          Zw G d8 d9          Zxd: Zyejj        z                     ej{                    d;k    d<=          d>             Z|d? Z}d@ Z~ejj                            ddAB          dC             Z G dD dE          ZdRdFZejj        j        ejj        z                     ej        ej                  j        dGk     dH=          dI                         ZdJ Zejj                            dKee[ejD        eejE        g          dL             ZdM Zejj                            dKee[ejD        eejE        g          dN             ZdO Z G dP dQ          ZdS )S    N)assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_assert_allclose)raises)eigeigvalslusvdsvdvalscholeskyqrschurrsf2csflu_solve	lu_factorsolvediagsvd
hessenbergrq
eig_bandedeigvals_bandedeigheigvalshqr_multiplyqzorthordqzsubspace_angleshadamardeigvalsh_tridiagonaleigh_tridiagonal
null_spacecdf2rdfLinAlgError)	dgbtrfdgbtrszgbtrfzgbtrsdsbevdsbevddsbevxzhbevdzhbevx)norm)_select_function)ortho_group)arraydiagfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeye)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIGFc                    |t           v 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nprandomrandconjTr>   rF   astype)nposdefdtypeAs       ]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr[   )   s    INN1a  29>>!Q#7#7#<<^QINN1a  WaK !	T!A#YYrvayy  88E??    c                    t          | t                    r| }|                    |          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'.
    rN      r   zinput type not supported.      ?)
isinstanceintrQ   rE   lenr@   	TypeErrorr3   rvsrT   rS   r5   )dim_or_eigvrngdimdvhs         rZ   symrandrk   ?   s     +s## 5JJsOOA!
['
*
* 5
k
 
 A
%
%"3444A	

T!WWq AQSUAHr\   c                   x    e Zd Zd Zd Zd Zd Zej        	                    de
eeeeg          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^   rN      rN         	   ]   rN   r   r   r>   r   selfawexact_ws       rZ   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 )Nro   rq   rh   rt   ru   rN   r   )r4   rT   copyr   r>   r   rw   s       rZ   test_simple_trzTestEigVals.test_simple_tra   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 )Nro   rN   rr   y      @      ?y      "@      ?y      W@      @rN   r   rv   rw   s       rZ   test_simple_complexzTestEigVals.test_simple_complexi   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 )	Nro   rq   Fcheck_finitert   ru   rN   r   rv   rw   s       rZ   test_finitezTestEigVals.test_finiteq   sj    YY			999-AE***d2hhJ>1qbz1n5!!W-----r\   dtc                 r   t          j        d|          }t          |          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ t          |d          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ d S )Nr   r   rX   r   rN   Thomogeneous_eigvalsrN   r   )rP   emptyr   r@   rX   rF   )rx   r   ry   rz   s       rZ   
test_emptyzTestEigVals.test_emptyw   s    HV2&&&AJJw$w'"&""5"5"566<<<<<A4000w&    w'"&""5"5"566<<<<<<<r\   N)__name__
__module____qualname__r|   r   r   r   pytestmarkparametrizera   floatr;   complexr<   r    r\   rZ   rm   rm   Y   s        . . .. . .. . .. . . [TC)#LMM= = NM= = =r\   rm   c                       e Zd Zd Zd Zd Zd Z	 	 ddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zej                            deeej        eej        g          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 )Nro   rq   rt   ru   rN   r   r^   rp         @r   r   r   r^   r   rN   leftright)r4   r
   r>   r1   r   rB   rangerT   	rx   ry   rz   ri   r{   v0v1v2is	            rZ   r|   zTestEig.test_simple   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^   rN   r         ?       @y      ?       )r4   r
   r   r   rS   rT   rx   ry   rz   vlvrr   s         rZ   test_simple_complex_eigzTestEig.test_simple_complex_eig   s   Aq6B7#$$+++	2r!!UD$<%8%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 )Nro   r   r^   r   rp   )r4   r
   r   r   rS   rT   r   s         rZ   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   Tr   r^   r   r   )r
   r   r   r   rP   inf)rx   ry   brz   r   s        rZ   test_gh_3054zTestEig.test_gh_3054   s    SESEAqd3332$###$1AAq		2QAr\   vIh%<=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         |||           +|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|||           L|	t          |	                   }|t          |                   }d
t          j        d|z  d          z  }d
t          j        d|z  d          z  }t#          t%          |          |j        z             }t#          t%          |          |j        z             }t          ||         ||         dd|           t          j	        t          |
                    }t          t          |
                    D ]}t          |
d d |f                   ||<   t          |t          j        |j                  |           t          t)          |          t)          |	t          j        |	                                        d S )N
Tr   r^   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   y             rM   g|=)tolr   )rC   rP   rF   r@   r
   r   r   r   lexsortr   rb   r1   onessizeallrD   real_if_closer8   absimagrA   )rx   rY   B
atol_homog
rtol_homogr   r   B0msgrz   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_fins                          rZ   _check_gen_eigzTestEig._check_gen_eig   sv   =1::wqzzqABB

AB A1! Art4442Q5552v!QQQ$2v!QQQ$tz!}%% 	K 	KADAJQQQT
!+*cK K K K K :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|$$ 	C 	CAvhs111a4y))** CAAAqD	1%)cC C C C (1++HRLL! b&r%xU;;;;r'6	u====s5zzEJ.//Ffk122dVE]!c	; 	; 	; 	; #b''""s2ww 	' 	'AR1XF1II 4 4cBBBB 	R$qQ'8"9"9:::::r\   c                    t          g dg dg dg dg dg          }t          g dg dg dg d	g d
g          }t          j        d          5  |                     ||dd           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   g-a=)r   r   )r4   rP   errstater   rx   rY   r   s      rZ   test_singularzTestEig.test_singular  s2    '''''''''''''''	) * *
 '''''''''''''''	) * * [X&&& 	D 	D1UCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A99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   rp   )rN   r   r   )r   rN   r   )r   r   rN   )r^   r   r   )r   r^   r   r   r   r   rp   rp   rp   r   r   )r5   r4   r9   rF   rP   blockr   r   )rx   MKDZI3rY   r   s           rZ   test_falkerzTestEig.test_falker  s8   yyy!!"";;;[[[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 )	NrN   )r^   r   r   r   )r   r^   r   r   r   )r   r   r^   r   )r   r   r   r^   r^   r   )omegac1c2rY   r   s        rZ   matricesz)TestEig.test_bad_geneig.<locals>.matrices#  s}    eQhB5BQAQ2 A QB3QA A a4Kr\   r   r   d         @)r	  )rP   r   r   r   )rx   r  krY   r   s        rZ   test_bad_geneigzTestEig.test_bad_geneig   s    	 	 	 [X&&& 	* 	*3ZZ * *xad3h///1##Aq))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   >A%%A),A)c                    t           j                            d          }t          d|          }|                     |d            t          d|          }|                     ||           |                    d          d|                    d          z  z   }|                     |d            |                    d          d|                    d          z  z   }|                     ||           d S )N  rp   r   rM   )rP   rQ   RandomStaterk   r   )rx   rf   rY   r   s       rZ   test_make_eigvalszTestEig.test_make_eigvals7  s     i##D))AsOOAt$$$AsOOAq!!!JJvCJJv$6$6!66At$$$JJvCJJv$6$6!66Aq!!!!!r\   c                    g dg dg dg}t          |d          \  }}dt          d          z   dz  ddt          d          z
  dz  g}t          d	d	d	t          d          d
z  z   dz  g          }t          g d          }t          d	d	d	t          d          d
z  z
  dz  g          }|t          |          z  }|t          |          z  }|t          |          z  }t	          ||           t	          ||d d df         t          |d                   z             t	          ||d d d	f         t          |d                   z             t	          ||d d df         t          |d                   z             t          d
          D ]2}t	          ||d d |f         z  ||         |d d |f         z             3d S )Nro   rq   Fr   rt   ru   rN   r   r^   rp   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            rZ   test_check_finitezTestEig.test_check_finiteE  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.rs   rp   rN   N)rP   r:   reshapeassert_raises
ValueErrorr
   )rx   rY   s     rZ   test_not_square_errorzTestEig.test_not_square_errorV  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.rN         "@rp   N)rF   rP   r:   r  r  r  r
   r   s      rZ   test_shape_mismatchzTestEig.test_shape_mismatch[  sZ     FFIcNN""1a((j#q!,,,j#q!,,,,,r\   c                    t          j        g dg dg dg dgd          }t          j        g dg dg d	g d
gd          }t          ||          \  }}t           j                                        5 }|                    t          d           t          j        |dd                                          sJ t          j        |dd                                          sJ 	 d d d            d S # 1 swxY w Y   d S )N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r!  g      L@g      Z@g      o@float64r   )       @      @      $@r   )r   r        &@g      =@)r        @g      *@g      ?@)r  r&  g      1@g     A@z%invalid value encountered in multiplyr$  +=r          @)	rP   r4   r
   testingsuppress_warningsfilterRuntimeWarningiscloseany)rx   rY   r   r  Vsups         rZ   test_gh_11577zTestEig.test_gh_11577c  s    H/////////0002 :CD D D H,,,,,,,,,---/ 7@A A A
 1ayy1 Z))++ 	8sJJ~'NOOO:a51115577777:a511155777777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   6A2C66C:=C:r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}|j        dk    sJ |j        |j        k    sJ t          |t          j        d                     |j        dk    sJ |j        |j        k    sJ t          |d          \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ d S )Nr   r   rN   r   Tr   r   )rP   r   r
   rF   r@   rX   r   )rx   r   ry   rz   r   w_nvr_ns          rZ   r   zTestEig.test_empty  s   HV2&&&A2q+++,,	Tw$w#)####BHV,,---x6!!!!x4:%%%%A40002w&    w#)####x6!!!!x4:%%%%%%r\   N)r   r   r   r   )r   r   r   r|   r   r   r   r   r   r  r  r  r  r  r  r3  r   r   r   ra   r   rP   r;   r   r<   r   r   r\   rZ   r   r      s2       C C C(< < << < <
 
 
 AF49H; H; H; H;TD D D"& & &* * *." " "A A A"* * *
- - -8 8 88 [TC
GR\#RSS& & TS& & &r\   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej                            deeej        eej        g          d             ZdS )TestEigBandedc                 .    |                                   d S N)create_bandmatrx   s    rZ   setup_methodzTestEigBanded.setup_method  s    r\   c                    d}d| _         d| _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    d	t          t          |dz
  d          d          z  z   d	t          t          |dz
  d          d          z  z
  t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d
          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        d	t          t          |d                    z  t          t          |dz
  d          d          z   d	t          t          |dz
  d
          d          z  z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        | j        dz   }t!          ||ft"                    | _        t!          ||ft&                    | _        t+          |          D ]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`.
   rN         ?r^         r          r   rM         r#  Nr   r         ?      ?)KLKUr5   r6   sym_matherm_matreal_matcomp_matr7   r
   realr8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   r   bandmat_symr   bandmat_hermr   bandmat_realbandmat_compr:   r   bc)rx   NewevargsLDABr   s          rZ   r;  zTestEigBanded.create_bandmat  s     T!S\\**tAaC3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,   rP  r8   r   rA   rL  r   rM  rx   rz   evecinfoevec_s        rZ   
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^   r[  N)r-   rP  r8   r   rA   rL  r   rM  r]  s        rZ   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^   rN   r\  r   N)
r@   rG  r.   rP  r8   r   rA   rL  r   rM  rx   rU  rz   r^  numifailr_  r`  s           rZ   test_dsbevxzTestEigBanded.test_dsbevx  s     T\""1$*4+;S#q!56a%A %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^   r[  N)r/   rQ  r8   r   rA   rN  r   rO  r]  s        rZ   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.re  r^   rN   rf  N)
r@   rH  r0   rQ  r8   r   rA   rN  r   rO  rg  s           rZ   test_zhbevxzTestEigBanded.test_zhbevx  s     T]##1$*4+<c3156a%A %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.rN   rs   r   selectselect_ranger^   h㈵>ri   Fr   N)
r   rP  rK  r   rA   rL  rQ  rN  rP   longlong)rx   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              rZ   test_eigvals_bandedz!TestEigBanded.test_eigvals_banded  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. NrN   rs   r   rp  r^   rs  ri   Fr   )r   rP  r8   rK  r   rA   rL  r   rM  rQ  rN  rO  )rx   ru  evec_sym	evec_sym_rv  	evec_herm
evec_herm_rw  rx  ry  evec_sym_indrz  evec_herm_indr{  r|  r}  evec_sym_valr~  evec_herm_vals                      rZ   test_eig_bandedzTestEigBanded.test_eig_bandedC  s    %T%5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.rN   Nr^   r   	permute_l)
r@   rI  r(   rR  rE  rF  r5   r   r   r   rx   r   rU  lu_symm_bandipivr_  ur   p_linl_linu_lins              rZ   test_dgbtrfzTestEigBanded.test_dgbtrf}       T]##1#)$*;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.rN   Nr^   r   r  )
r@   rJ  r*   rS  rE  rF  r5   r   r   r   r  s              rZ   test_zgbtrfzTestEigBanded.test_zgbtrf  r  r\   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r(   rR  rE  rF  r)   r   r7   r   rI  r   rx   r  r  r_  yy_lins         rZ   test_dgbtrszTestEigBanded.test_dgbtrs  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*   rS  rE  rF  r+   rT  r7   r   rJ  r   r  s         rZ   test_zgbtrszTestEigBanded.test_zgbtrs  sm     $*$*;TWdg#N#N dDtw$GG4T]DG44!!U+++++r\   r   c                    t          j        d|          }t          |          \  }}t          t          j        ddgddgg|                    \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ t          |d          }|j        dk    sJ |j        |j        k    sJ d S )Nr   r   r   r^   r   Teigvals_only)rP   r   r   r4   r@   rX   )rx   r   a_bandrz   ri   r5  v_ns          rZ   r   zTestEigBanded.test_empty  s    &+++&!!1bhAA'7rBBBCCSw$w#)####w&    w#)####vD111w$w#)######r\   N)r   r   r   r=  r;  ra  rc  rj  rl  rn  r  r  r  r  r  r  r   r   r   ra   r   rP   r;   r   r<   r   r   r\   rZ   r8  r8    s-         M$ 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, , ,, , ,, , ,, , , [TC
GR\#RSS$ $ TS$ $ $r\   r8  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestEigTridiagonalc                 .    |                                   d S r:  )create_trimatr<  s    rZ   r=  zTestEigTridiagonal.setup_method  s    r\   c                    d}t          |d          | _        t          |dz
  d          | _        t          | j                  t          | j        d          z   t          | j        d          z   | _        t          j        | j                  \  }}|j        }t          |          }||         | _	        |dd|f         | _
        dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r?  r@  r^   rA  r   N)r6   rh   er5   full_matr7   r
   rK  r8   rz   r^  )rx   rU  rV  rW  rX  s        rZ   r  z TestEigTridiagonal.create_trimat  s     aac4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   rM   r@  lapack_driverfoor   r   r   rp  )r  r  r#   rh   r  rc   r<  s    rZ   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6s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  rq  rr  r  r  r  r   r^   rq  rr  r  rN   rs   rs  ri   N)	r#   rh   r  r   rA   rz   r  r  rb   )	rx   driverrz   w_indrw  rx  r{  r|  w_vals	            rZ   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  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  rN   rs   rs  ri   )r  r  r$   rh   r  r8   r   rA   rz   r   r^  rb   )	rx   r  rz   r^  r`  rw  rx  r{  r|  s	            rZ   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s    	j"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\   c                    t          j        dg          }t          j        g           }t          ||d          }|j        dk    sJ t	          ||           t          ||dd          \  }}|j        dk    sJ |j        dk    sJ t	          ||           t	          |t          d	gg                     t          ||d
d          \  }}|j        dk    sJ |j        dk    sJ |j        dk    sJ dS )zSee gh-20075rB  Tr  r^   r   r   rp  rN   r@  ri   )r   r   r   r   r   N)rP   r4   r$   ndimr   r   r@   )rx   ry   r   xr1  s        rZ   test_eigh_tridiagonal_1x1z,TestEigTridiagonal.test_eigh_tridiagonal_1x1,  s   HdVHRLLQ555v{{{{11SvFFF1v{{{{v{{{{152$==)))1SwGGG1v{{{{w$w&      r\   N)	r   r   r   r=  r  r  r  r  r  r   r\   rZ   r  r    sv               8 8 8 H  H  HD(F (F (FT! ! ! ! !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	          d             Ze	j
                            dd          e	j
                            dd          d                         Zd Ze	j
                            deeej        eej        g          d             ZdS )TestEighc                 D    t           j                            d           d S )Nr  )rP   rQ   seedr<  s    rZ   setup_classzTestEigh.setup_class@  s    
	tr\   c           	      L   t          t          t          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg          d           t          t          t          t          j        ddg          t          j        ddg          ddgddg           t          t          t          t          j        ddg          t          j        ddg          ddg           t          t          t          t          j        ddg          t          j        ddg          d	dg           t          t          t          t          j        ddg          t          j        ddg          ddg           t          t          t          t          j        ddg          t          j        ddg          ddg
           t          t          t          t          j        ddg          d           t          t          t          t          j        ddg          d d           t          t          t          t          j        ddg          t          j        ddg          d           t          t          t          t          j        ddg          t          j        ddg          dddg           t          t          t          t          j        ddg          t          j        ddg          dddg           d S )Nr^   rN   rp      )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r  r  r   rP   r   r<  s    rZ   test_wrong_inputszTestEigh.test_wrong_inputsC  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 	j$A!Q'(!f	. 	. 	. 	. 	j$A!Q')1g	/ 	/ 	/ 	/ 	j$A!Q'(!f	. 	. 	. 	. 	j$A!Q'(!f	. 	. 	. 	. 	j$AHHHHj$AeLLLLj$A!Q"	$ 	$ 	$ 	$ 	j$A!Q"QF	< 	< 	< 	<j$A!Q"QF	< 	< 	< 	< 	< 	<r\   c           	          t          t          t          t          j        ddg          t          j        ddg                     d S )Nrp   )r  r'   r   rP   r   r<  s    rZ   test_nonpositive_bzTestEigh.test_nonpositive_bi  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   rN   r  r^   T)rW   rX   )	enumerateDTYPESr[   r   r   r@   rb   r   )rx   indr   ry   rz   ri   r   s          rZ   test_value_subsetszTestEigh.test_value_subsetsm  s     (( 
	+ 
	+GC(2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^   rN      rp   rr   )r4   r   )rx   ry   r   rz   zs        rZ   test_eigh_integerzTestEigh.test_eigh_integerz  sZ    Aq6Aq6"##Aq6Aq6"##Aww1Aqzz111r\   c                     dd l }|j                            d                                          }t	          j        |          }t          t          t          |           t          t          t          |           d S )Nr   rN   )	scipy.sparsesparseidentitytocscrP   
atleast_2dr  r  r   )rx   scipyry   r   s       rZ   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse  sh    L!!!$$**,,M!j$***j$*****r\   dtype_r  )rW  evdr  evxc                     t          d|          }t          ||          \  }}t          ||z  ||z  z
  ddt          j        |          j        z  d           d S )Nr  )rV   rX   r  re    r   r   )r[   r   r   rP   finfoeps)rx   r  r  ry   rz   ri   s         rZ   test_various_drivers_standardz&TestEigh.test_various_drivers_standard  su     %r888Af%%%1AQ!"(6"2"2"66	! 	! 	! 	! 	! 	!r\   c                 b   t          dgg|          \  }}t          |t          dg          d           t          |t          dgg          d           t          dgg|          \  }}t          |t          dg          d           t          |t          dgg          d           d S )Nr^   r  r@  gV瞯<r)  rM   r   )r   r   r4   )rx   r  rz   ri   s       rZ   test_1x1_lworkzTestEigh.test_1x1_lwork  s    aSE&)))15";;U333352$==u5555 bTF6***15!::E222252$==u555555r\   r  ro   )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)rW   )ry   r   r  r  r^   re  r  rN   )rP   spacingr[   r   r   )rx   r  r  r   ry   r   rz   ri   s           rZ    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalized  s     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 )
Nrr   r^   rN   r  )r^   333333??      ?rN   gffffff?r  r  r  )r[   r   r   rb   r   rP   r5   r4   )rx   ry   rz   w2r   w3s         rZ   test_eigvalsh_new_argszTestEigh.test_eigvalsh_new_args  s    $Q''QA///S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\   r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ t          |d          }t          |t          j        d                     |j        dk    sJ |j        |j        k    sJ d S )Nr   r   rN   r   Tr  )rP   r   r   rF   r@   rX   r   )rx   r   ry   rz   ri   r5  r  s          rZ   r   zTestEigh.test_empty  s    HV2&&&Aww1q+++,,Sw$w#)####w&    w#)####&&&28D>>***w$w#)######r\   N)r   r   r   r  r  r  r  r  r  r   r   r   r  r  r  r  r  ra   r   rP   r;   r   r<   r   r   r\   rZ   r  r  ?  s         $< $< $<LK K K+ + +  + + + [Xv..[X'BCC! ! DC /.! [X'BCC6 6 DC6 [VY//[X';<<
G 
G =< 0/
G2 2 2 [TC
GR\#RSS$ $ TS$ $ $r\   r  c                   D   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ej                            dg d          ej                            dg d          ej                            de          d                                     Zej                            deeej        eej        g          ej                            dg d          d                         ZdS )TestSVD_GESDDgesddc                     t          t          t          dggd           t          t          t          dggd           d S )Nr@  r  r  )r  rc   r   r  r<  s    rZ   r  zTestSVD_GESDD.test_degenerate  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 )Nro   r^   r  rp   rq   TFfull_matricesr  rp   r   r   r  r   rT   rF   r9   r@   rX   charr   rb   rx   ry   r	  r  svhsigmar   s           rZ   r|   zTestSVD_GESDD.test_simple  s    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 )Nro   rq   r  r  rp   r   r
  r  s           rZ   test_simple_singularz"TestSVD_GESDD.test_simple_singular  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 )Nro   r  rr   rs   r  r  r   r   r  r   rT   rF   r@   r9   rX   r  r   rb   r  s           rZ   test_simple_underdetz"TestSVD_GESDD.test_simple_underdet  s    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^   rN   r  rr   rp   r  r  r   r  r  s           rZ   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           
         t           j                            d          }d}d}t          d          D ](}|                    ||g          |                    ||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   rp   r  r  r^   r   )rP   rQ   r  r   r   r  r   rT   rF   r@   r9   rX   r  rb   )rx   rf   rV   mr   ry   r	  r  r  r  r  s              rZ   test_randomzTestSVD_GESDD.test_random  sq   i##D))q 
	A 
	AAjj!Q((#**aV*<*<= 	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 )Nro   )r^   y               @rp   rq   r  r  r^   r   )r   r  r   rS   rT   rF   r@   r9   rX   r  r   rb   r  s           rZ   r   z!TestSVD_GESDD.test_simple_complex  s   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           
         t           j                            d          }d}d}t          d          D ];}dD ]4}|                    ||g          |                    ||g          fD ]}|d|                    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  |           6=d S )
Nr  r  r   rp   r  rM   r  r^   r   )rP   rQ   r  r   listr@   r   r  r   rS   rT   rF   r9   rX   r  rb   )rx   rf   rV   r  r   r	  ry   r  r  r  r  s              rZ   test_random_complexz!TestSVD_GESDD.test_random_complex  s   i##D))q 	A 	AA!. A A**aV,,cjj!Q.@.@A A AABszz$qw--8888A"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                    t           j                            d          }g d}|D ]f}t           j        t           j        t           j        t           j        fD ]5} |j        |                     |          }t          || j
                   6gd S )Nr  ))r   r   )r   2   )<   r  r  )rP   rQ   r  r;   r"  r<   
complex128rR   rU   r   r  )rx   rf   sizesszr   ry   s         rZ   test_crash_1580zTestSVD_GESDD.test_crash_15801  s    i##D))/// 	9 	9Bz2:r|R]K 9 9CHbM((,,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 )Nro   r  rq   F)r   r  rp   r   r
  )rx   ry   r  r  r  r  r   s          rZ   r  zTestSVD_GESDD.test_check_finite:  s    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(  re  re  re  )re  r(  r)  r(  re  re  )re  re  r(  r)  r(  re  )re  re  re  r(  r)  r(  r  )rP   r4   r   r  )rx   r   s     rZ   test_gh_5039zTestSVD_GESDD.test_gh_5039D  s^     H============?@ @
 	AT/000000r\   z64-bit LAPACK requiredreasonc                    t          d           t          j        ddgt          j                  }d|d<   t	          |d          \  }}}t          |d	         d
           t          |d         |d         z  d
           d S )NihB  )free_mbr^   l        r   r  Fr	  r   r@  r   )rI   rP   r9   r;   r   r   )rx   rY   r  r  r  s        rZ   test_large_matrixzTestSVD_GESDD.test_large_matrixU  s     	%((((HaZrz222%q...1b!c"""$"U)+S11111r\   r  r   r^   rN   rV   rX   c                    t          j        ||f|          }t          ||          }|j        j        }|dv r|                                n|}t          |          \  }}	}
t          |j        ||f           t          |j        |           t          |	j        |f           t          |	j        t          j        |                     t          |
j        ||f           t          |
j        |           t          |d          \  }}	}
t          |j        ||f           t          |j        |           t          |	j        |f           t          |	j        t          j        |                     t          |
j        ||f           t          |
j        |           t          |d          }	t          |	j        |f           t          |	j        t          j        |                     d S )Nr   FDFr/  
compute_uv)	rP   r9   minrX   r  lowerr   r   r@   )rx   r  rV   rX   ry   r  dchar
real_dcharr  r  ri   s              rZ   test_shape_dtypezTestSVD_GESDD.test_shape_dtype_  s    HaV5)))1II&+tmmU[[]]]
a&&1aQWq!f%%%QWe$$$QWqd###QWbhz22333QWq!f%%%QWe$$$au---1aQWq!f%%%QWe$$$QWqd###QWbhz22333QWq!f%%%QWe$$$e$$$QWqd###QWbhz2233333r\   r   r  rV   r   r   r   c                    t          j        d|          }t          |          \  }}}t          j        ||f|          }t          |          \  }	}
}t	          |	t          j        |                     t	          |
t          j        d                     t	          |t          j        |                     |	j        |j        k    sJ |j        |j        k    sJ |
j        |j        k    sJ t          |d          \  }	}
}t	          |	t          j        |df                     t	          |
t          j        d                     t	          |t          j        d|f                     |	j        |j        k    sJ |j        |j        k    sJ |
j        |j        k    sJ t          |d          }
t	          |
t          j        d                     |
j        |j        k    sJ d S )Nrp   r   r   Fr/  r   r4  )rP   rF   r   r   r   r  rX   )rx   r   r  rV   a0u0s0r   ry   r  r  ri   s               rZ   r   zTestSVD_GESDD.test_empty|  s    VAR   WW
BHaV2&&&a&&1a2;q>>***28D>>***2;q>>***w"(""""w"(""""w"(""""au---1a28QF++,,,28D>>***28QF++,,,w"(""""w"(""""w"(""""e$$$28D>>***w"(""""""r\   N)r   r   r   r  r  r|   r  r  r  r  r   r  r%  r  r*  r   r   skipifrJ   slowr0  r   r  r:  ra   r   rP   r;   r   r<   r   r   r\   rZ   r  r    s       MD 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 [S))),,[S))),,[Wf--4 4 .- -, -,44 [TC
GR\#RSS[Z)A)A)ABB# # CB TS# # #r\   r  c                       e Zd ZdZdS )TestSVD_GESVDgesvdN)r   r   r   r  r   r\   rZ   rD  rD    s        MMMr\   rD  rr   c                      t          j        dt           j                  } t          t                    5  t          |            d d d            d S # 1 swxY w Y   d S )N)i  i  r   )rP   r   r"  r  r  r   )dfs    rZ   test_svd_gesdd_nofegfaultrH    s     
w}BJ///B	z	"	"  B                 s   AAAc                       e Zd Zej                            deeej	        e
ej        g          d             Zd Zd Zd Zd Zd Zd Zd	 Zej        j        d
             ZdS )TestSVDValsr   c                 X   g gt          j        d          t          j        d          fD ]~}t          j        ||          }t	          |          }t          |t          j        d                     t	          t          j        d|                    }|j        |j        k    sJ d S )Nr   r   rp   r   r   rN   )rP   r   r   r4   r   r   rF   rX   )rx   r   ry   r  r@  s        rZ   r   zTestSVDVals.test_empty  s    rx''8 	' 	'A"%%%A

ABHQKK(((,,,--B7bh&&&&&	' 	'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 )Nro   rq   rp   r   r^   rN   r   r   rb   rx   ry   r  s      rZ   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 )Nro   r  rN   r   r^   rN  rO  s      rZ   r  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^   rN   r  rr   rp   r   rN  rO  s      rZ   r  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 )Nro   )r^   r                @rq   rp   r   r^   rN   rN  rO  s      rZ   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 )Nro   )r  y              @rs   rN   r   r^   rN  rO  s      rZ   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^   rN   r  rr   rS  r   rN  rO  s      rZ   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 )	Nro   rq   Fr   rp   r   r^   rN   rN  rO  s      rZ   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
  )rP   rQ   r  rR   r   rx   ry   s     rZ   test_crash_2609zTestSVDVals.test_crash_2609  s:    
	tINN4&&




r\   N)r   r   r   r   r   r   ra   r   rP   r;   r   r<   r   r|   r  r  r   rU  rW  r  rB  r[  r   r\   rZ   rJ  rJ    s        [TC
GR\#RSS' ' TS'& & &    & & &    & & & [    r\   rJ  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   rp   r   )r   r   r<  s    rZ   r|   zTestDiagSVD.test_simple  sK    !')))Q":":#,99iii"C	E 	E 	E 	E 	Er\   N)r   r   r   r|   r   r\   rZ   r]  r]    s(        E E E E Er\   r]  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6e7j8        9                    d5g d6          e7j8        9                    d7g d6          e7j8        9                    d8d9d:g          e7j8        9                    d;e:          d<                                                 Z;e7j8        9                    d=g d>          d?             Z<d@ Z=dAS )BTestQRc                     g dg dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S N   rN   rp   rN   rt   rp   rr   rp   rs   rp   r   r   rT   rF   rx   ry   qrs       rZ   r|   zTestQR.test_simple  s_    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 )Nrd  rf  rg  ro   r   rp   r   r   r   rF   rx   ry   rj  rk  cqcr2s          rZ   test_simple_leftzTestQR.test_simple_left  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 )Nrd  rf  rg  ro   rp   rm  rn  s          rZ   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 )	Nrd  rf  rg  Tpivotingr^   r   rp   
rP   rC   r   r   r5   r   r   r   rT   rF   rx   ry   rj  rk  prh   q2rq  s           rZ   test_simple_pivotingzTestQR.test_simple_pivoting  s    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 )Nrd  rf  rg  Trv  ro   r   r   r   r   rx   ry   rj  rk  jpvtro  rp  s          rZ   test_simple_left_pivotingz TestQR.test_simple_left_pivoting  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 )Nrd  rf  rg  Trv  ro   r~  r  s          rZ   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 )Nrd  rf  rN   rh  ri  s       rZ   test_simple_trapzTestQR.test_simple_trap   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 )Nrd  rf  Trv  r^   r   rN   rx  ry  s           rZ   test_simple_trap_pivotingz TestQR.test_simple_trap_pivoting&  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 Nre  rN   rt   rr   rp   rh  ri  s       rZ   test_simple_tallzTestQR.test_simple_tall1  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 )
Nre  rN   rt   rr   rp   Trv  r^   r   rx  ry  s           rZ   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting8  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 )
Nre  rN   rt   rr   rp   economicmoderp   rN   rN   rN   r   r   rT   rF   r   r@   ri  s       rZ   test_simple_tall_ezTestQR.test_simple_tall_eD  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 )Nre  rN   rt   rr   rp   Tr  rw  r  r^   r   r  rx  ry  s           rZ   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivotingM  s    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 )Nre  rN   rt   rr   rp   r  r  r^   r   r^   rN   r   Toverwrite_cr   r   r   r4   rF   rn  s          rZ   test_simple_tall_leftzTestQR.test_simple_tall_leftY  s    VaVaV$!*%%%1FQ6**B!!a%,,,!!R((()))Q6t<<<B!!ae)R0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 )Nre  rN   rt   rr   rp   r  Tr  rw  r^   r   )r   r   r   r   rF   )rx   ry   rj  rk  r  ro  rp  kpvts           rZ   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivotingf  s    VaVaV$
T:::
1dF!!Q5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 )	Nre  rN   rt   rr   rp   r  r  ro   rm  rx   ry   rj  rk  ro  cqrq  s          rZ   test_simple_tall_rightzTestQR.test_simple_tall_rightp  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 )Nre  rN   rt   rr   rp   Tr  r  ro   rv  rm  rx   ry   rj  rk  r  ro  r  s          rZ   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivotingz  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re  rN   rr   rf  rN   r  rN   rp   r  ri  s       rZ   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  rf  Trv  r^   r   rN   r  r  rP   rC   r   r   r5   r   r   r   rT   rF   r   r@   ry  s           rZ   test_simple_fat_pivotingzTestQR.test_simple_fat_pivoting  s   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 )Nrd  rN   rt   rr   r  r  rN   r  r  r  ri  s       rZ   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 )Nrd  r  Tr  r  r^   r   rN   r  r  r  r  ry  s           rZ   test_simple_fat_e_pivotingz!TestQR.test_simple_fat_e_pivoting  s   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 )Nrd  r  r  r  r^   rN   r   rm  rn  s          rZ   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 )	Nrd  r  r  Tr  r^   rN   r   rm  r  s          rZ   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 )Nrd  r  r  r  r^   rN   rm  r  s          rZ   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 )	Nrd  r  Tr  r  r^   rN   rv  rm  r  s          rZ   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rp         @      @rr   rr   rN   y       @      @rp   rN   r  rp   )r   r   rS   rT   rF   ri  s       rZ   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^   rN   r  r   rp   rm  rx   ry   rj  rk  ro  rp  s         rZ   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  rp   rm  r  s         rZ   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 )Nre  y       @      @rN   rt   y      @      @rp   r  r  r^          @       @r   r  Tr  r  rn  s          rZ   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_left  s    YAq	*!*%%%1IQ6**B!!a%,,,!!R((()))Q6t<<<B!!ae)R0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   rS   r  s         rZ   "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 )Nrp   r  rr   r  rN   r  r  r^   r   Tr  r  r  s         rZ   'test_simple_complex_tall_left_conjugatez.TestQR.test_simple_complex_tall_left_conjugate  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   rP   r4   r   r   rS   r  s         rZ   #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  Trv  r^   r   rp   )r4   r   r   r5   r   rP   r   r   rS   rT   rF   ry  s           rZ   test_simple_complex_pivotingz#TestQR.test_simple_complex_pivoting  s    <<<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  Trv  r  r   r4   r   r   r   r  s          rZ   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivoting  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  Trv  r  r  r  s          rZ   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting#  sw    <<<yyy9::D)))
1dLL!!Q666At!!a%,,,,,r\   c                 .   t           j                            d          }d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr  r  rN   rP   rQ   r  r   r   r   rT   rF   rx   rf   rV   r  ry   rj  rk  s          rZ   r  zTestQR.test_random*  s    i##D))q 	0 	0A

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

Aq6""Aa55DAq

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

Aq6""Aa55DAq

A3A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r\   c           	      b   t           j                            d          }d}t          d          D ]}|                    ||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  r  rN   Trv  r^   r   rP   rQ   r  r   r   r   r5   r   r   r   rT   rF   rx   rf   rV   r  ry   rj  rk  rz  rh   r{  rq  s              rZ   test_random_pivotingzTestQR.test_random_pivotingK  s   i##D))q 		- 		-A

Aq6""AT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r\   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr     r  rN   r  rx   rf   r  rV   r  ry   rj  rk  s           rZ   test_random_tallzTestQR.test_random_tallY  s    i##D))q 	0 	0A

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

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

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

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

A3A1%%EB%a!eR0003q66**EB%b!,,,,	- 	-r\   c           	      f   t           j                            d          }d}d}t          d          D ]}|                    ||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  r  r  rN   Trv  r^   r   r  rx   rf   r  rV   r  ry   rj  rk  rz  rh   r{  rq  s               rZ   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s$   i##D))q 		- 		-A

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

Aq6""Aaj)))DAq%acAgs1vv666%a!eQ///1a&)))1a&))))	* 	*r\   c           	         t           j                            d          }d}d}t          d          D ]/}|                    ||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          ||           1d S )Nr  r  r  rN   Tr  r  r^   r   r  )rP   rQ   r  r   r   r   r5   r   r   r   rT   rF   r   r@   r  s               rZ   test_random_tall_e_pivotingz"TestQR.test_random_tall_e_pivoting  sY   i##D))q 	- 	-A

Aq6""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                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr  r  r  rN   r  r  s           rZ   test_random_trapzTestQR.test_random_trap  s    i##D))q 	0 	0A

Aq6""Aa55DAq%acAgs1vv666%a!eQ////		0 	0r\   c           	      f   t           j                            d          }d}d}t          d          D ]}|                    ||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  r  r  rN   Trv  r^   r   r  r  s               rZ   test_random_trap_pivotingz TestQR.test_random_trap_pivoting  s$   i##D))q 		- 		-A

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

Aq6""R

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

Aq6""R

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

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

Aq6""R

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

A3"SZZ__"44A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r\   c           	         t           j                            d          }d}t          d          D ]+}|                    ||g          d|                    ||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  r  rN   rM   Trv  r^   r   )rP   rQ   r  r   r   r   r5   r   r   r   rS   rT   rF   r  s              rZ   test_random_complex_pivotingz#TestQR.test_random_complex_pivoting  sA   i##D))q 		- 		-A

Aq6""R

Aq6(:(:%::A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 Nrd  rf  rg  Fr   rp   rh  ri  s       rZ   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 )Nrd  rf  rg  )lworkrp   r?  r   r  r   rN   )r   r   r  	Exception)
rx   ry   rj  rk  r{  rq  q3r3q4r4s
             rZ   
test_lworkzTestQR.test_lwork  s   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\   r  r1  rV   rw  FTrX   c                 b   t          ||          }t          j        ||f|          }t          ||          ^}}}	t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^}}	t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^}}}	t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^\  }}}}	t	          |j        ||f           t	          |j        |           t	          |j        |f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r;|	\  }
t	          |
j        |f           t	          |
j        t          j                   d S d S )	Nr   rv  r^   r   rk  r  r  raw)	r6  rP   r9   r   r   r@   rX   rb   int32)rx   r  rV   rw  rX   r  ry   rj  rk  otherrz  r  taus                rZ   r:  zTestQR.test_shape_dtype  s<   
 1IIHaV5)))!h///1uQWq!f%%%QWe$$$QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++qsX666	EQWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++!*x@@@1uQWq!f%%%QWe$$$QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++ "158 D D D
cASYA'''SY&&&SY%%%SY&&&QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++++	, 	,r\   r;  r<  c                 &   t          ||          }t          j        ||f          }t          |          \  }}t	          |t          j        |                     t	          |t          j        ||f                     t          |d          \  }}}t	          |t          j        |                     t	          |t          j        ||f                     t	          |t          j        |                     t          |d          \  }t	          |t          j        ||f                     t          |d          \  }}t	          |t          j        ||f                     t	          |t          j        ||f                     t          |d          \  \  }}	}t	          |t          j        ||f                     t	          |	t          j        |f                     t	          |t          j        ||f                     d S )NTrv  rk  r  r  r  )r6  rP   r   r   r   r  r:   )
rx   r  rV   r  ry   rj  rk  rz  r  r  s
             rZ   r   zTestQR.test_emptyI  s   1IIHaV!uu12;q>>***28QF++,,,Q&&&1a2;q>>***28QF++,,,29Q<<(((___28QF++,,,!*%%%128QF++,,,28QF++,,,15)))
cARXq!f--...RXqd^^,,,28QF++,,,,,r\   c                 4   t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     d S )Nr   r   r   )rP   r   r   r   )rx   ry   ro  r  rk  s        rZ   test_multiply_emptyzTestQR.test_multiply_emptyc  s    HVHVAq!!ABHV,,---HVHVAq!!ABHV,,---HVHVAq!!ABHV,,-----r\   N)>r   r   r   r|   rr  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r   r   r   r  r:  r   r  r   r\   rZ   ra  ra    s       , , ,) ) )) ) )	) 	) 	)- - -- - -, , ,	) 	) 	), , ,
) 
) 
)& & &
) 
) 
)) ) )) ) )) ) )) ) )& & &) ) )& & &) ) )) ) )) ) )) ) )) ) ), , ,) ) )) ) )) ) )4 4 44 4 44 4 4	) 	) 	)- - -- - -0 0 0
- 
- 
-
- 
- 
-- - -	0 	0 	0- - -- - -- - - * * *- - -$0 0 0- - -0 0 0
- 
- 
-
- 
- 
-- - -, , ,9 9 90 [S))),,[S))),,[Z%77[Wf--., ., .- 87 -, -,.,` [Z)A)A)ABB- - CB-2. . . . .r\   ra  c                   |   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej                            dg d          ej                            dg d          ej                            de          d                                     Zej                            dg d          d             ZdS )TestRQc                     g dg dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S rc  r   r   rT   rF   rx   ry   rk  rj  s       rZ   r|   zTestRQ.test_simpleu  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 )Nrd  rf  rg  rk  r  )r   r   )rx   ry   rk  rj  rq  s        rZ   test_rzTestRQ.test_r{  sN    YY			999-!uu1___!!R(((((r\   c                 .   t           j                            d          }d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          ||j        z  t          |                     t          ||z  |           dd S r  rP   rQ   r  r   r   r   rT   rF   rx   rf   rV   r  ry   rk  rj  s          rZ   r  zTestRQ.test_random  s    i##D))q 	0 	0A

Aq6""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 )Nrd  rf  rp   r  r   s       rZ   r  zTestRQ.test_simple_trap  r  r\   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S r  r  r   s       rZ   r  zTestRQ.test_simple_tall  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  rf  rp   r  r   s       rZ   r  zTestRQ.test_simple_fat  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   rS   rT   rF   r   s       rZ   r   zTestRQ.test_simple_complex  sg    \\<<<3!uu1!!affhhj.#a&&999!!a%+++++r\   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          ||j        z  t          |                     t          ||z  |           dd S r  r$  rx   rf   r  rV   r  ry   rk  rj  s           rZ   r  zTestRQ.test_random_tall      i##D))q 	0 	0A

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

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

Aq6""R

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

Aq6""R

Aq6(:(:%::A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 r  r  r   s       rZ   r  zTestRQ.test_check_finite  sf    YY			999-!%(((1!!ac'3q66222!!a%+++++r\   r  r1  rV   rX   c                 |   t          ||          }t          j        ||f|          }t          |          \  }}t	          |j        ||f           t	          |j        ||f           t	          |j        |           t	          |j        |           t          |d          }t	          |j        ||f           t	          |j        |           t          |d          \  }}t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           d S )Nr   rk  r  r  )r6  rP   r9   r   r   r@   rX   )rx   r  rV   rX   r  ry   rk  rj  s           rZ   r:  zTestRQ.test_shape_dtype  s+    1IIHaV5)))!uu1QWq!f%%%QWq!f%%%QWe$$$QWe$$$qsOOOQWq!f%%%QWe$$$!*%%%1QWq!f%%%QWe$$$QWq!f%%%QWe$$$$$r\   r;  r<  c                 $   t          ||          }t          j        ||f          }t          |          \  }}t	          |t          j        ||f                     t	          |t          j        |                     t          |d          }t	          |t          j        ||f                     t          |d          \  }}t	          |t          j        ||f                     t	          |t          j        ||f                     d S )Nrk  r  r  )r6  rP   r   r   r   r  )rx   r  rV   r  ry   rk  rj  s          rZ   r   zTestRQ.test_empty  s    1IIHaV!uu128QF++,,,2;q>>***qsOOO28QF++,,,!*%%%128QF++,,,28QF++,,,,,r\   N)r   r   r   r|   r"  r  r  r  r  r   r  r  r/  r  r2  r  r   r   r   r  r:  r   r   r\   rZ   r  r  t  s}       , , ,) ) )0 0 0, , ,, , ,, , ,, , ,0 0 00 0 0
* 
* 
*0 0 0
* 
* 
*, , , [S))),,[S))),,[Wf--% % .- -, -,%( [Z)A)A)ABB- - CB- - -r\   r  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ej                            deeej        eej        g          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   rS   rT   rP   rF   rb   )rx   ry   tr  r   r   s         rZ   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re     rp   rf  r?  rp   rs   r(  +<r   r   r   )r   r:  r   rP   r0  r=   r?   r   )rx   ry   r9  r  tczctc2zc2s           rZ   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lhprN         r_   rhpiucoucc                     | dk    S )Nre  r   )r  s    rZ   <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@  rA  g      g      rA  r@  r        @      g      @rP  r$  rC        @rA   r(  r?  r@  -q=r   rN   )r   r:  r   rP   r5   r   )rx   rA   expected_diagry   r9  r  sdims          rZ   	test_sortzTestSchur.test_sort  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 )NrM  rN  rO  rR  unsupportedrT  r^   )r  r  r   rZ  s     rZ   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 )Nr<  rf  r>  Fr   )r   r   rS   rT   )rx   ry   r9  r  s       rZ   r  zTestSchur.test_check_finite6  sY    ZZJJJ/QU+++1!!a%!&&((*"4a88888r\   r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}t	          |t          j        d                     t	          |t          j        d                     |j        |j        k    sJ |j        |j        k    sJ t          |d          \  }}}t	          |t          j        d                     t	          |t          j        d                     t          |d           |j        |j        k    sJ |j        |j        k    sJ d S )Nr   r   rN   rE  rT  r   )rP   r   r   rF   r   rX   r   )rx   r   ry   r9  r  t0z0rX  s           rZ   r   zTestSchur.test_empty;  s/   HV2&&&Qxx1rvar***++B28F++,,,28F++,,,w"(""""w"(""""15)))
1d28F++,,,28F++,,,T1w"(""""w"(""""""r\   N)r   r   r   r:  r|   r   r   r   rP   r>   rY  r\  r  ra   r   r;   r   r<   r   r   r\   rZ   r7  r7    s       4 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
 [TC
GR\#RSS# # TS# # #r\   r7  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	eeeeeg          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   rT   rx   ry   h1rj   rj  s        rZ   r|   zTestHessenberg.test_simpleO  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 )Nrd  )rf  y             f@rh  )y             ;r  rj  r^   rn  )r   r   rS   rT   rx   ry   rj   rj  s       rZ   r   z"TestHessenberg.test_simple_complexZ  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^   rN   rp   r  rr   rs   r  )r   rN   rp   r  rs   r  rN   )r   rN   rN   rp   r   rp   rN   )r   r   rN   re  r   r   rN   )r   rp   r^   rN   r   r^   rN   )r   r^   rN   rp   r   r^   r   )r   r   r   r   r   r^   rN   r^   rn  rr  rv  s       rZ   test_simple2zTestHessenberg.test_simple2a  s    """""""""""""""""""""$ !A&&&1!!#'A+q11111r\   c                     t          j        d          }d|d<   t          |d          \  }}t          |j        |z  |z  |           d S )Nrp   rN   )r   r   r^   rn  )rP   rF   r   r   rT   rv  s       rZ   test_simple3zTestHessenberg.test_simple3l  sN    F1II%!A&&&1!!#'A+q11111r\   c                     t           j                            d          }d}t          d          D ]H}|                    ||g          }t	          |d          \  }}t          |j        |z  |z  |           Id S )Nr  r  rN   r^   rn  )rP   rQ   r  r   r   r   rT   rx   rf   rV   r  ry   rj   rj  s          rZ   r  zTestHessenberg.test_randomr  s    i##D))q 	6 	6A

Aq6""Aa***DAq%acAgk15555	6 	6r\   c                 R   t           j                            d          }d}t          d          D ]u}|                    ||g          d|                    ||g          z  z   }t	          |d          \  }}t          |                                j        |z  |z  |           vd S )Nr  r  rN   rM   r^   rn  )rP   rQ   r  r   r   r   rS   rT   r|  s          rZ   r  z"TestHessenberg.test_random_complexz  s    i##D))q 	= 	=A

Aq6""R

Aq6(:(:%::A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 )Nrd  re  ri  rk  rl  rm  r^   F)ro  r   r  rp  rr  rs  s        rZ   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 )
NrN   r^   r  r=  rn  y       @      r   y      @      @y      (@       )r   r   rP   rF   )rx   ry   rj   rj  r   h2r{  s          rZ   test_2x2zTestHessenberg.test_2x2  s    VaW!A&&&1!!RVAYY///!!Q'''D\D%=)Aa(((B!"bfQii000!"a(((((r\   r   c                    t          j        d|          }t          |          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ t          |d          \  }}t          |d          \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ d S )Nr   r   rp   Trn  )rP   r   r   r@   rX   rF   )rx   r   ry   rj   rj  h3r  s          rZ   r   zTestHessenberg.test_empty  s    HV2&&&qMMw&    w*RVAR%8%8%899?????!D)))1Ad+++Bw&    w"(""""w&    w"(""""""r\   N)r   r   r   r|   r   rx  rz  r  r  r  r  r   r   r   ra   r   r;   r   r<   r   r   r\   rZ   rb  rb  M  s        	4 	4 	49 9 9	2 	2 	22 2 26 6 6= = =	4 	4 	4
) 
) 
) [TC)#LMM# # NM# # #r\   rb  zBuild Dependenciesblasnameversionc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestQZc                    t           j                            d          }d}|                    ||g                              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 )N90  rr   rp  r   )rP   rQ   r  rU   r;   r   r   rT   rF   r   r   r5   	rx   rf   rV   rY   r   AABBQr  s	            rZ   test_qz_singlezTestQZ.test_qz_single  s   i##E**JJ1v%%g..JJ1v%%g..!QxxB1!!b&13,1====!!b&13,1====!!ac'3q661====!!ac'3q661====tBxx1}%%&&&&&r\   c                 2   t           j                            d          }d}|                    ||g          }|                    ||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  rr   r   
rP   rQ   r  r   r   rT   rF   r   r   r5   r  s	            rZ   test_qz_doublezTestQZ.test_qz_double  s    i##E**JJ1vJJ1v!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                    t           j                            d          }d}|                    ||g          d|                    ||g          z  z   }|                    ||g          d|                    ||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  rr   rM   r   )rP   rQ   r  r   r   rS   rT   rF   r   r   r5   r   r  s	            rZ   test_qz_complexzTestQZ.test_qz_complex  sj   i##E**JJ1vCJJ1v$6$6!66JJ1vCJJ1v$6$6!66!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                    t           j                            d          }d}|                    ||g          d|                    ||g          z  z                       t                    }|                    ||g          d|                    ||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  rr   rM   rp  r   )rP   rQ   r  rU   r<   r   r   rS   rT   rF   r   r   r5   r   r  s	            rZ   test_qz_complex64zTestQZ.test_qz_complex64  s   i##E**ZZA"SZZA%7%7"77??	JJZZA"SZZA%7%7"77??	JJ!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                 6   t           j                            d          }d}|                    ||g          }|                    ||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  rr   r   )outputr   )rP   rQ   r  r   rS   rT   r   rK  r   rF   r   r   r5   )rx   rf   rV   rY   r   r  r  r  r  aabbs              rZ   test_qz_double_complexzTestQZ.test_qz_double_complex  sJ   i##E**JJ1vJJ1v!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       ErS  )皙@rP        GrP  )r@  r@  rC  r@  )r@  r   g      r  )r@  r#  rQ  r@  )r  r   rQ  r$  c                     |dk    S )Nr   r   )araibetas      rZ   rK  z,TestQZ.test_qz_double_sort.<locals>.<lambda>
	  s
    bAg r\   rT  )	rP   r4   r  r  r   r   r   rT   r   )rx   rY   r   r  r  r  r  rX  s           rZ   test_qz_double_sortzTestQZ.test_qz_double_sort  s     H------,,,,,,. / /
 H++++++++++++- . .
 	j"a1M1MNNNN	F 	Fr\   c                 6   t           j                            d          }d}|                    ||g          }|                    ||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  rr   Fr   r   r  r  s	            rZ   r  zTestQZ.test_check_finiteU	  s    i##E**JJ1vJJ1v!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   r  r  r  r  r  r  r  r   r\   rZ   r  r    s        
' 
' 
'
' 
' 
', , ,, , ,' ' ' 5F 5F 5FF
' 
' 
' 
' 
'r\   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              )rM   y333333@y              y      @      )r  r  r  rF  r  )r  r  r  rS  )r  g      :@r  rP  )r^   rN   r^   )r^   rp   r  )r^   rp   rp   )r^   rp   r  r  )r  r@  r   r   )r$  r$  r#  r'  )r'  r$  r@  r   )re  r$  r*  r'  )r*  r%  rP  r%  )r'  r'  r#  r  )r  r@  rP  rP  )r  r@  r$  r'  rN   r   r^   )rP   r4   rF   r5   rY   r   )
clsA1B1A2B2A3B3A4B4A5s
             rZ   r  zTestOrdQZ.setup_classc	  s    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 )rT  )r    ).0AiBirA   s      rZ   
<listcomp>z'TestOrdQZ.qz_decomp.<locals>.<listcomp>	  s,    NNNB5Rd+++NNNr\   )rP   r   ziprY   r   tuple)rx   rA   rets    ` rZ   	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^   rN   T)rP   rF   r@   r   rT   rS   r   trilr9   r   r
   r   r   r   r2   r4   )rx   rY   r   rA   r  r  alphar  r  r  Idr   evals_tmpsortfunlastsortcursorts                     rZ   checkzTestOrdQZ.check	  s   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 r:  )r  r  rY   r   r  )rx   rA   r  retir  r  s         rZ   	check_allzTestOrdQZ.check_all	  sc    nnT""TVTV44 	, 	,LD"bDJr2t+d+++++	, 	,r\   c                 0    |                      d           d S )NrE  r  r<  s    rZ   test_lhpzTestOrdQZ.test_lhp	      ur\   c                 0    |                      d           d S )NrG  r  r<  s    rZ   test_rhpzTestOrdQZ.test_rhp	  r  r\   c                 0    |                      d           d S )NrH  r  r<  s    rZ   test_iuczTestOrdQZ.test_iuc	  r  r\   c                 0    |                      d           d S )NrI  r  r<  s    rZ   test_ouczTestOrdQZ.test_ouc	  r  r\   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S Nr   r   FrP   
empty_likeboolr   r  r  outnonzeros       rZ   rA   z TestOrdQZ.test_ref.<locals>.sort	  M    -...CAvG!CMgJqz171<CLJr\   r  rx   rA   s     rZ   test_refzTestOrdQZ.test_ref	  +    	 	 	 	tr\   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S r  r  r  s       rZ   rA   z TestOrdQZ.test_cef.<locals>.sort	  r  r\   r  r  s     rZ   test_cefzTestOrdQZ.test_cef	  r  r\   c                 >   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   d S )Nr^   rN   rE  rT  )r    rY   r   r  )rx   r  s     rZ   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 )NrN   r   r_   rE  rF  rG  rH  rI  y             ?y      ?      ?yٿɿ      ?      r   r^   rT  )	rP   rF   r5   r   nanr  r    r  r   )rx   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rY   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzeror  s                                 rZ   test_sort_explicitzTestOrdQZ.test_sort_explicit	  s    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\   rZ   r  r  b	  s        4% 4% [4%l  
, , ,\, , ,        	 	 		 	 	6 6 6-5 -5 -5 -5 -5r\   r  c                   ~    e Zd Zej                            d          d             Zej        j        d             ZdS )TestOrdQZWorkspaceSizerN   c                 T   t           j                            d          }d}t           j        t           j        fD ]j}|                    ||f                              |          }|                    ||f                              |          }t          ||d d          }kt           j        t           j        fD ]j}|                    ||f                              |          }|                    ||f                              |          }t          ||d d          }kd S )Nr     c                     | |k     S r:  r   r  r  s     rZ   rK  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>6
  
    UT\ r\   rK  )rA   r  c                     | |k     S r:  r   r  s     rZ   rK  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda><
  r  r\   r   )	rP   rQ   r  r;   r"  rU   r    r"  r<   )rx   rf   rU  ddtyperY   r   r  s          rZ   test_decomposez%TestOrdQZWorkspaceSize.test_decompose-
  s*   i##E**z2:. 	% 	%F

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

Aq6""))&11Aa!A!A#% % %AA }bl3 	( 	(F

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

Aq6""))&11Aa!A!A&( ( (AA	( 	(r\   c                    t           j                            d          }d}t           j        t           j        t           j        t           j        fD ]o}|                    ||f                              |          }|                    ||f                              |          }t          ||d          \  }}}}	}
}pd S )Nr  r  rI  rT  )	rP   rQ   r  r;   r"  r"  r<   rU   r    )rx   rf   rU  r
  rY   r   SrT   r  r  Ur1  s               rZ   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc?
  s    i##E**z2:r}blK 	> 	>F

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

Aq6""))&11A&+Aqu&=&=&=#Aq%q!!	> 	>r\   N)	r   r   r   r   r   	fail_slowr  rB  r  r   r\   rZ   r  r  ,
  s_        [1( ( (" [> > > > >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^   rN   rp   c                       e Zd Zd fd	ZdS )-TestDatacopied.test_datacopied.<locals>.Fake1Nc                     S r:  r   )rx   rX   r~   rY   s      rZ   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__U
  s    r\   )NN)r   r   r   r  rY   s   rZ   Fake1r  T
  s3               r\   r  c                       e Zd Z j        ZdS )-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r  s   rZ   Fake2r  X
  s        "#"7r\   r  FTr   )scipy.linalg._decompr  rH   rC   tolistr~   r   repr)rx   r  r   LM2r  r  F1F2itemstatusarrrY   s               @rZ   test_datacopiedzTestDatacopied.test_datacopiedL
  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   r)  r   r\   rZ   r  r  J
  s#        - - - - -r\   r  c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z4Check linalg works with non-aligned memory (float32)i  r   rN   r  offsetcountrX   r?  r?  Toverwrite_aN)	r:   rP   uint8
frombufferdatar;   r@   r
   rT   ry   r  s     rZ   test_aligned_mem_floatr5  e
  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  r+  r.  Tr/  N)	r:   rP   r1  r2  r3  r   r@   r
   rT   r4  s     rZ   test_aligned_memr8  r
  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   re  r  r+  r.  Tr/  N)	r9   rP   r1  r2  r3  r   r@   r
   rT   r4  s     rZ   test_aligned_mem_complexr:  
  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 )Nre  r   r  r+  .r^   )r  r   rb   r`   rP   rE   r9   r   rX   itemsizer1  r2  r3  r@   rT   )funcrX  kwargsr   ry   r  s         rZ   check_lapack_misalignedr?  
  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 )Nr?  r   r  r.  i N  r  r+  Tr/  )overwrite_b)r0  rB  )rP   rF   r   r:   r@   r1  r2  r3  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   r?  )	r   Rr  r   LUpivr=  rX  r>  s	            rZ   test_lapack_misalignedrG  
  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   )rG   r
   r<  s    rZ   test_eigzTestOverwrite.test_eig
  s/    C&***C&&!122222r\   c                 `    t          t          dg           t          t          ddg           d S rK  )rG   r   r<  s    rZ   	test_eighzTestOverwrite.test_eigh
  s/    D6(+++D66"233333r\   c                 2    t          t          dg           d S Nr  )rG   r   r<  s    rZ   r  zTestOverwrite.test_eig_banded
      J11111r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_eigvalszTestOverwrite.test_eigvals
      GfX.....r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_eigvalshzTestOverwrite.test_eigvalsh
  s    Hvh/////r\   c                 2    t          t          dg           d S rP  )rG   r   r<  s    rZ   r  z!TestOverwrite.test_eigvals_banded
  s    NVH55555r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_hessenbergzTestOverwrite.test_hessenberg
  rQ  r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_lu_factorzTestOverwrite.test_lu_factor
  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 )Nro   r  )r  re  re  c                 $    t          |           S r:  )r   )r   xlus    rZ   rK  z-TestOverwrite.test_lu_solve.<locals>.<lambda>
  s    hsA&6&6 r\   )rp   )rP   r4   r   rG   )rx   r  r^  s     @rZ   test_lu_solvezTestOverwrite.test_lu_solve
  sR    HiiiIII677ll6666?????r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_luzTestOverwrite.test_lu
      B)))))r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_qrzTestOverwrite.test_qr
  rb  r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_rqzTestOverwrite.test_rq
  rb  r\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   
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 )Nr   )r   ry   s    rZ   rK  z2TestOverwrite.test_schur_complex.<locals>.<lambda>
  s    eAy&9&9 r\   r   )dtypes)rG   rP   r;   r"  r<  s    rZ   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 )NrE  r  )r   rk  s    rZ   rK  z(TestOverwrite.test_svd.<locals>.<lambda>
  s    c!7&C&C&C r\   )rG   r   r<  s    rZ   test_svdzTestOverwrite.test_svd
  s0    C&***CCfXNNNNNr\   c                 2    t          t          dg           d S rK  )rG   r   r<  s    rZ   test_svdvalszTestOverwrite.test_svdvals
  rT  r\   N)r   r   r   rL  rN  r  rS  rV  r  rY  r[  r_  ra  rd  rf  rh  rm  rp  rr  r   r\   rZ   rI  rI  
  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\   rI  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 )NrN   r   r  r^   r)  rN   r^   rr   -C6?MbP?rcondư>rs   )rP   r   r   rU   r  r  r   r   r@   r   meanrT   rQ   r  rR   )rV   rX   skip_bigXr  r   Ys          rZ   _check_orthr~  
  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\   re  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~  rP   r"  MemoryErrorAssertionError)rV   r  s     rZ   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^   rN   rp   r?  r  )rP   r;   r"  r<   r"  	itertoolsproductr~  )rl  r#  r   rV   s       rZ   	test_orthr  '  s`    j"*blBMBFE"6511  AAr r\   r   c                     t          j        d|           }t          j        d|           }t          |          }|j        t          |          j        k    sJ |j        dk    sJ d S Nr   r   rN   )rP   r   rF   r   rX   r@   )r   ry   r>  oas       rZ   test_orth_emptyr  -  si    
r"""A				B	aB8tBxx~%%%%8v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  rN   r   r  r   r)  rt  rr   ru  rv  rw  ry  rs   )rP   rQ   r  r;   r"  r<   r"  r  r  r   r  r  r%   r   r@   r   rT   randnrR   rU   )rl  r#  r   rV   r|  r  r   r}  s           rZ   test_null_spacer  7  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          j        d|           }t          j        d|           }t          |          }|j        dk    sJ |j        t          |          j        k    sJ d S r  )rP   r   rF   r%   r@   rX   )r   ry   r>  nsas       rZ   test_null_space_emptyr  ]  sj    
r"""A				B
Q--C99
2,,,,,,,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           t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     d S ) Nre  rp   r#  r(  r)  r^   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rN   r   rU  rV  gL0?gĹ-?gyv?r   r_  )r   r^   r   )r   r   r^   r   rD  r  re  r   r   r   r   rL  )r"   r   r   r!   rP   pir9   r@   r4   r  r  r   )HrY   r   r  r  ry   r   s          rZ   test_subspace_anglesr  g  s7   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:::: 	A
AOAq))28D>>:::
A
AOAq))28D>>:::
A
AOAq))28D>>:::::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)rP   einsum)rx   ry   r   s      rZ   matmulzTestCDF2RDF.matmul  s    y-q!444r\   c                 v    t          |                     ||          |                     ||                     d S r:  )r   r  )rx   rz   ri   r  s       rZ   assert_eig_validzTestCDF2RDF.assert_eig_valid  s@    !KK1KK1	
 	
 	
 	
 	
r\   c                     t          j        d          }t          j        d          t          j        d          }}t          ||          \  }}|                     |||           d S )Nr   r   )rP   r   r&   r  rx   r|  rz   ri   wrr   s         rZ   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^   rN   rp   r   rP   r4   r7   r
   r&   r  r  s         rZ   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^   rN   r   r  r  s         rZ   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 )Nro   rq   r  r  s         rZ   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 Nro   )r   r  rr   )r   r  r  r  r  s         rZ   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^   r  iɚ;r  )	r   rP   rQ   r  rR   r7   r
   r&   r  rx   r   r|  rz   ri   r  r   s          rZ   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^   r  r?  )r   rP   rQ   rR   r7   r
   r&   r  r  s          rZ   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays  s    q! 	- 	-A	r2q!,,A9==##DAqQ]]FB!!"b!,,,,		- 	-r\   c                     t          j        d          t          j        d          }}t          t          t
          ||           d S )Nr   )rN   )rP   r   r4   r  r  r&   rx   rz   ri   s      rZ   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error  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 )Nrp   rs   rN   rP   r:   r  r  r  r&   r  s      rZ   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  rP   r4   r7   r
   r  r  r&   rx   r|  rz   ri   s       rZ   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error  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 )Nrp   r   r  r  r  s      rZ   test_non_associated_errorz%TestCDF2RDF.test_non_associated_error  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 )Nro   r   )rN   rr   y      @      r  r  s       rZ   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairs  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\   rZ   r  r    s        5 5 5
 
 
) ) )) ) )) ) )) ) )) ) )- - -- - -1 1 11 1 1
1 1 11 1 1
1 1 1 1 1r\   r  )F)r  platformnumpyrP   numpy.testingr   r   r   r   r   r   r   r	   r  scipy.linalgr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   scipy.linalg.lapackr(   r)   r*   r+   r,   r-   r.   r/   r0   scipy.linalg._miscr1   scipy.linalg._decomp_qzr2   scipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   scipy.linalg._testutilsrG   scipy.sparse._sputilsrH   scipy._lib._testutilsrI   scipy.linalg.blasrJ   scipy.__config__rK   ImportErrorr   r[   r"  REAL_DTYPESr"  rO   r  rk   rm   r   r8  r  r  r  rD  r   r  rH  rJ  r]  ra  r  r7  rb  blas_providerblas_versionr  r  r  r  r5  rA  machiner8  r:  r?  xfailrG  rI  r~  rB  rX   intpr<  r  r  r   ra   r   r  r  r  r  r  r   r\   rZ   <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A A A A A A A A A A A A A A A A A A A A A A $ # # # # # 4 4 4 4 4 4 # # # # # #; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 8 7 7 7 7 7 ( ( ( ( ( ( 3 3 3 3 3 3 ' ' ' ' ' ''''''''   FFF (-E     z2:&,.	~	%
  4'= '= '= '= '= '= '= '=TO& O& O& O& O& O& O& O&ff$ f$ f$ f$ f$ f$ f$ f$P	~! ~! ~! ~! ~! ~! ~! ~!BJ$ J$ J$ J$ J$ J$ J$ J$XM# M# M# M# M# M# M# M#^    M    q  ; ; ; ; ; ; ; ;|E E E E E E E EE
. E
. E
. E
. E
. E
. E
. E
.PN- N- N- N- N- N- N- N-bE# E# E# E# E# E# E# E#PY# Y# Y# Y# Y# Y# Y# Y#x  $ #	/08@M./7	BLp' p' p' p' p' p' p' p'fG5 G5 G5 G5 G5 G5 G5 G5T> > > > > > > ><- - - - - - - -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    UBJNOO  PO#. #. #.L UBJNOO- - PO-B; B; B;J[1 [1 [1 [1 [1 [1 [1 [1 [1 [1s   C C#"C#