
    bin                    t   d dl Z d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d d	lm?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d d
lRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z] ej                  dk(  xs  ej                         dv Z_de`fdZaej                  ej                  gZcej                  ej                  gZeeceez   Zfd Zg G d d      Zh G d d      Zi G d d      Zj G d d      Zk G d d      Zl G d d       Zm G d! d"em      Znej                  j                  e_d#$      ej                  j                  d%      ej                  j                  d&      ej                  j                  d'      d(                             Ztd) Zu G d* d+      Zv G d, d-      Zw G d. d/      Zx G d0 d1      Zy G d2 d3      Zz G d4 d5      Z{dxZ|Z}e]d6   d7   d8   Z|e]d6   d7   d9   Z} G d: d;      Z~ G d< d=      Z G d> d?      Z G d@ dA      ZdB Zej                  j                   ej                         dCk(  dD$      dE        ZdF ZdG Zej                  j                  ddHI      dJ        Z G dK dL      ZdYdMZej                  j                  ej                  j                   ej                  ej                        j                  dNk  dO$      dP               ZdQ Zej                  j!                  dRee`ej                  eej                  g      dS        Z G dT dU      ZdV Z G dW dX      Zy)Z    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)skip_xp_invalid_arg)CONFIG
emscripten)wasm32wasm64Fc                    |t         v ret        j                  j                  | |       t        j                  j                  | |       dz  z   }||j	                         j
                  z   dz  }n2t        j                  j                  | |       }||j
                  z   dz  }|r'|t        d| z        t        j                  |       z  z  }|j                  |      S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprandomrandconjTr>   rF   astype)nposdefdtypeAs       Y/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr_   +   s     IINN1a 299>>!Q#7#<<^QIINN1a WaK	T!A#Yrvvay  88E?    c                    t        | t              r| }|j                  |      dz  dz
  }nEt        | t              r*t	        | j
                        dk(  r| j
                  d   }| }nt        d      t        j                  |      }|j                  j                         t        |      z  |z  }d|j                  |z   z  }|S )a  Return a random symmetric (Hermitian) matrix.

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

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

2!T'
Bq%xLt$ #	% #b'"s2w 	'AR1XF1I	' 	 4c!	. !Q$1q,!A|O"44 Ar
2Q^2v2vzTksyy|$ 	CAvvhs1a4y)*AqD	1%)cC	C (1+HRL! b&&r%xU;;r''6	u==s5zEJJ./Ffkk12dVE]!c	; #b'"s2w 	'AR1XF1I	' 4cB 	R$qQ'8"9:r`   c                     t        g dg dg dg dg dg      }t        g dg dg dg d	g d
g      }t        j                  d      5  | j                  ||dd       d d d        y # 1 sw Y   y xY w)N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   r   )r4   rT   errstater   r|   r]   r   s      r^   test_singularzTestEig.test_singular  s     '''''	) *
 '''''	) * [[X& 	D1UC	D 	D 	Ds   A**A3c                    t        t        g d            }t        g dg dg df      }t        g dg dg df      }t        d      }t        d	      }t	        j
                  ||g|| gg      }t	        j
                  ||g||gg      }t	        j                  d
      5  | j                  ||       d d d        y # 1 sw Y   y xY w)N)rb   r   rt   )rR   r   r   )r   rR   r   )r   r   rR   )rb   r   r   )r   rb   r   r   r   r   rt   rt   rt   r   r   )r5   r4   r9   rF   rT   blockr   r   )r|   MKDZI3r]   r   s           r^   test_falkerzTestEig.test_falker  s    y!";[9::z956&MVHHr1gA2w'(HHq"g1v&'[[X& 	&1%	& 	& 	&s   "B>>Cc                     d }t        j                  d      5  t        d      D ]&  } ||dz  dz        \  }}| j                  ||       ( 	 d d d        y # 1 sw Y   y xY w)Nc                 n    d| dz  z   }d| z  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	NrR   )rb   r   r   r   )r   rb   r   r   r   )r   r   rb   r   )r   r   r   rb   rb   r   )omegac1c2r]   r   s        r^   matricesz)TestEig.test_bad_geneig.<locals>.matrices&  sm    eQhB5BQAQ2 A QB3QA A a4Kr`   r   r   d         @)r  )rT   r   r   r   )r|   r  kr]   r   s        r^   test_bad_geneigzTestEig.test_bad_geneig#  sc    	 [[X& 	*3Z *ad3h/1##Aq)*	* 	* 	*s   5AA"c                    t         j                  j                  d      }t        d|      }| j	                  |d        t        d|      }| j	                  ||       |j                  d      d|j                  d      z  z   }| j	                  |d        |j                  d      d|j                  d      z  z   }| j	                  ||       y )N  rt   r  rQ   )rT   rU   RandomStatero   r   )r|   rj   r]   r   s       r^   test_make_eigvalszTestEig.test_make_eigvals:  s     ii##D)AsOAt$AsOAq!JJvCJJv$6!66At$JJvCJJv$6!66Aq!r`   c                    g dg dg dg}t        |d      \  }}dt        d      z   dz  ddt        d      z
  dz  g}t        d	d	d	t        d      d
z  z   dz  g      }t        g d      }t        d	d	d	t        d      d
z  z
  dz  g      }|t        |      z  }|t        |      z  }|t        |      z  }t	        ||       t	        ||d d df   t        |d         z         t	        ||d d d	f   t        |d         z         t	        ||d d df   t        |d         z         t        d
      D ]%  }t	        ||d d |f   z  ||   |d d |f   z         ' y )Nrs   ru   Fr   rx   ry   rR   r   rb   rt   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            r^   test_check_finitezTestEig.test_check_finiteH  sY   	9-15)1d2hJ>1qbz1n5Aq1T"XaZ<*+,;Aq1T"XaZ<*+,$r(]$r(]$r(]!!W-!"a1gd1T7m&;<!"a1gd1T7m&;<!"a1gd1T7m&;<q 	AA%a!AqD'k1Q4!Q$<@	Ar`   c                 x    t        j                  d      j                  dd      }t        t        t
        |       y)z:Check that passing a non-square array raises a ValueError.rw   rt   rR   N)rT   r:   reshapeassert_raises
ValueErrorr
   )r|   r]   s     r^   test_not_square_errorzTestEig.test_not_square_errorY  s(    IIaL  A&j#q)r`   c                     t        d      }t        j                  d      j                  dd      }t	        t
        t        ||       t	        t
        t        ||       y)zOCheck that passing arrays of with different shapes
        raises a ValueError.rR         "@rt   N)rF   rT   r:   r  r  r  r
   r   s      r^   test_shape_mismatchzTestEig.test_shape_mismatch^  sC     FIIcN""1a(j#q!,j#q!,r`   c                    t        j                  g dg dg dg dgd      }t        j                  g dg dg d	g d
gd      }t        ||      \  }}t        j                         5  t        j
                  ddt               t        j                  |dd      j                         sJ t        j                  |dd      j                         sJ 	 d d d        y # 1 sw Y   y xY w)N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r$  g      L@g      Z@g      o@float64r   )       @      @      $@r#  )r   r        &@g      =@)r        @g      *@g      ?@)r   r)  g      1@g     A@r   z%invalid value encountered in multiplyr'  +=r          @)	rT   r4   r
   warningscatch_warningsfilterwarningsRuntimeWarningiscloseany)r|   r]   r   r  Vs        r^   test_gh_11577zTestEig.test_gh_11577f  s     HH///02 :CD HH,,,-/ 7@A
 1ay1 $$& 	8##A>S::a5155777::a5155777	8 	8 	8s   *A,C  C)r   c                 R   t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ t        |t        j                  d             |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rR   r   Tr   r   )rT   r   r
   rF   r@   r\   r   )r|   r   r}   r~   r   w_nvr_ns          r^   r   zTestEig.test_empty  s    HHV2&A2q+,	Tww$ww#))###BHHV,-xx6!!!xx4::%%%A402ww&   ww#))###xx6!!!xx4::%%%r`   	include_BFTr   r   r   r\   c                 f   d}d}t         j                  j                  d      }|j                  ||z         j                  |      }	|j                  ||z         j                  |      }
t	        ||      }|rt        |	f|
|d|}nt        |	fd|i|}t        |d         D ]  }t        |d         D ]w  }|rt        |	||f   f|
||f   |d|}nt        |	||f   fd|i|}|s|r1t        t        |            D ]  }t        ||   ||f   ||           gt        |||f   |       y  y )	Nrt   rR   )   r<  l   F)Q)r   r   )r   r   r   r   rb   )	rT   rU   default_rngrY   dictr
   r   rf   r   )r|   r9  r   r   r   r\   batch_shape
core_shaperj   r]   r   kwargsr   r   jrefr  s                    r^   test_nd_inputzTestEig.test_nd_input  sW    
ii##M2JJ{Z/077>JJ{Z/077>E7JKa214262Ca-d-f-C{1~& 	4A;q>* 
4a1gF1a4tFvFCa1g;D;F;C5"3s8_ >'Aq!tc!f=> $C1Is3
4	4r`   N)vIh%<=rE  rE  rE  )r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r5  r   r   r   re   r   rT   r;   r   r<   r   
complex128rD  r   r`   r^   r   r      s4   C(<<
 AF49H;TD"&*."A"*
-8: [[TC

GR\\#RS& T&( [[[5$-8[[VeT]3[[Wudm4[[2UDMB[[Wrzz2==&AB4 C C 5 4 9
4r`   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  j%                  deeej,                  eej0                  g      d        Zy)TestEigBandedc                 $    | j                          y N)create_bandmatr|   s    r^   setup_methodzTestEigBanded.setup_method  s    r`   c                    d}d| _         d| _        t        t        |d            t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        t        |d            d	t        t        |dz
  d      d      z  z   d	t        t        |dz
  d      d      z  z
  t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        t        |d            t        t        |dz
  d      d      z   t        t        |dz
  d
      d      z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        d	t        t        |d            z  t        t        |dz
  d      d      z   d	t        t        |dz
  d
      d      z  z   t        t        |dz
  d      d      z   t        t        |dz
  d      d      z   | _        t        j                  | j                        \  }}|j                  }t        |      }||   | _        |dd|f   | _        t        j                  | j
                        \  }}|j                  }t        |      }||   | _        |dd|f   | _        | j                  dz   }t!        ||ft"              | _        t!        ||ft&              | _        t+        |      D ]\  }t        | j                  |      | j$                  ||z
  dz
  ||f<   t        | j
                  |      | j(                  ||z
  dz
  ||f<   ^ d| j                   z  | j                  z   dz   }t!        ||ft"              | _        t        | j                        | j,                  d| j                   z  ddf<   t+        | j                         D ]  }t        | j                  |dz         | j,                  d| j                   z  dz
  |z
  |dz   |f<   t        | j                  | dz
        | j,                  d| j                   z  dz   |z   d|dz
  |z
  f<    t!        ||ft&              | _        t        | j                        | j.                  d| j                   z  ddf<   t+        | j                         D ]  }t        | j                  |dz         | j.                  d| j                   z  dz
  |z
  |dz   |f<   t        | j                  | dz
        | j.                  d| j                   z  dz   |z   d|dz
  |z
  f<    dt1        |      z  | _        | j2                  dz  | _        y)zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rR         ?rb         r          r   rQ         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)r|   NewevargsLDABr   s          r^   rK  zTestEigBanded.create_bandmat  s%     T!S\*tAaC346:4!T?A6NOtAaC346:4!T?A6NO
 d1dm,d4!S>2667d4!S>1556  QqS$45  QqS$3	4 d1cl+QqS$457;D1dOQ7OPQqS#346:4!T?A6NO
 Da..QqS$45d4!T?A667  QqS#34  QqS$3	4 DLL)BWWr{Dq$wKDMM*BWWr{T(4[
 ww{ $%8!4)7;t 	FA.24<<.CDT!VAXqs]+/3DMM1/EDd1fQh!m,	F y477"Q&!4)59*.t}}*=!DGG)Q,'tww 	CA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45		C "4)7;*.t}}*=!DGG)Q,'tww 	CA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45		C VAY&&F#r`   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.rb   	compute_vN)r,   r`  r8   r   rA   r\  r   r]  r|   r~   evecinfoevec_s        r^   
test_dsbevzTestEigBanded.test_dsbev  sY     d..!<4Q
]#!$q'4>>:!#e*c$2C2C.DEr`   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rb   rk  N)r-   r`  r8   r   rA   r\  r   r]  rm  s        r^   test_dsbevdzTestEigBanded.test_dsbevd  sY     t//1=4Q
]#!$q'4>>:!#e*c$2C2C.DEr`   c           	      *   t        | j                        \  }}t        | j                  ddd|dd      \  }}}}}|ddt	        |      f   }t        t        |      | j                         t        t        |      t        | j                               y)zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        rb   rR   rl  r   N)
r@   rW  r.   r`  r8   r   rA   r\  r   r]  r|   re  r~   rn  numifailro  rp  s           r^   test_dsbevxzTestEigBanded.test_dsbevx  s~     T\\"1$*4+;+;S#q!56a%A!4eTQ
]#!$q'4>>:!#e*c$2C2C.DEr`   c                     t        | j                  d      \  }}}|ddt        |      f   }t        t	        |      | j
                         t        t        |      t        | j                               y)zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rb   rk  N)r/   ra  r8   r   rA   r^  r   r_  rm  s        r^   test_zhbevdzTestEigBanded.test_zhbevd(  sY     t00A>4Q
]#!$q'4??;!#e*c$2D2D.EFr`   c           	      *   t        | j                        \  }}t        | j                  ddd|dd      \  }}}}}|ddt	        |      f   }t        t        |      | j                         t        t        |      t        | j                               y)zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.ru  rb   rR   rv  N)
r@   rX  r0   ra  r8   r   rA   r^  r   r_  rw  s           r^   test_zhbevxzTestEigBanded.test_zhbevx0  s~     T]]#1$*4+<+<c3156a%A!4eTQ
]#!$q'4??;!#e*c$2D2D.EFr`   c                 >   t        | j                        }|j                  }t        t	        |      | j
                         t        | j                        }|j                  }t        t	        |      | j                         d}t        j                  d      }t        | j                  d||f      }t        t	        |      | j
                  ||dz           t        | j                  d||f      }t        t	        |      | j                  ||dz           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  d||f      }	t        t	        |	      | j
                  ||dz           | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      }
t        t	        |
      | j                  ||dz           t        | j                  d	      }|j                  }t        t	        |      | j
                         y
)z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rR   rw   r   selectselect_rangerb   h㈵>rm   Fr   N)
r   r`  r[  r   rA   r\  ra  r^  rT   longlong)r|   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              r^   test_eigvals_bandedz!TestEigBanded.test_eigvals_banded;  s   t//0

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

!$u+t~~>r`   c           
      2   t        | j                        \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               t        | j                        \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               d}d}t        | j                  d||f      \  }	}
t	        t        |	      | j                  ||dz           t	        t        |
      t        | j                  dd||dz   f                t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      \  }}t	        t        |      | j                  ||dz           t	        t        |      t        | j                  dd||dz   f                t        | j                  d	
      \  }}|ddt        |j                        f   }t	        t        |      | j                         t	        t        |      t        | j                               y)zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrR   rw   r   r  rb   r  rm   Fr   )r   r`  r8   r[  r   rA   r\  r   r]  ra  r^  r_  )r|   r  evec_sym	evec_sym_r  	evec_herm
evec_herm_r  r  r  evec_sym_indr  evec_herm_indr  r  r  evec_sym_valr  evec_herm_vals                      r^   test_eig_bandedzTestEigBanded.test_eig_bandede  s>    %T%5%56xQ

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

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

GR\\#RS$ T$r`   rH  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestEigTridiagonalc                 $    | j                          y rJ  )create_trimatrL  s    r^   rM  zTestEigTridiagonal.setup_method  s    r`   c                    d}t        |d      | _        t        |dz
  d      | _        t        | j                        t        | j                  d      z   t        | j                  d      z   | _        t        j                  | j                        \  }}|j                  }t        |      }||   | _	        |dd|f   | _
        y)z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.rO  rP  rb   rQ  r   N)r6   rl   er5   full_matr7   r
   r[  r8   r~   rn  )r|   re  rf  rg  rh  s        r^   r  z TestEigTridiagonal.create_trimat  s     aac4dffTVVR(884?JDMM*BWWr{Dq$wK	r`   c                    t        t        t        | j                  | j                  dd        t        t
        t        | j                  | j                  dz         t        t
        t        | j                  | j                  d       t        t        t        | j                  | j                  d       t        t        t        | j                  | j                  dd	       y)
zTest error conditions.Nr   rQ   rP  lapack_driverfoor   r   r   r  )r  r  r#   rl   r  rg   rL  s    r^   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6sLi!5tvvtvv{Ki!5tvvtvv$&	(j"6$)	+ 	j"6 w	8r`   c           
      B   dD ]C  }t        | j                  | j                  |      }t        t	        |      | j
                         E dD ]0  }t        t        t         | j                  | j                  |dd       2 dD ]  }t        | j                  | j                  ddt        | j                        d	z
  f|
      }t        t	        |      | j
                         d}d}t        | j                  | j                  d||f|
      }t        t	        |      | j
                  ||d	z           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  | j                  d||f|
      }t        t	        |      | j
                  ||d	z            y)z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstevdstebzstemrautor  )r  r  r  r   r   r  r  r  r  r  r  r   rb   r  r  r  rR   rw   r  rm   N)	r#   rl   r  r   rA   r~   r  r  rf   )	r|   driverr~   w_indr  r  r  r  w_vals	            r^   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  sy    K 	7F$TVVTVV6JA%d1gtvv6	7 1 	/F*&:DFFDFF(.s'-/	/ 1 	HF(s!S[]9K$&E &d5k466: DD(s$$&E &d5k466$tAv3FG ffTlV+GffTlV+G(s'79K$&E &d5k466$tAv3FG+	Hr`   c                 @   t        t        t        | j                  | j                  d       dD ]  }t        | j                  | j                  |      \  }}|ddt        |      f   }t        t        |      | j                         t        t        |      t        | j                                t        t        t        | j                  | j                  ddd       d	D ]  }d
}t        | j                        dz
  }t        | j                  | j                  d||f|      \  }}t        t        |      | j                         t        t        |      t        | j                               d}d}t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                 y)zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  r  Nr  r   r   r  r  r   rb   r  rR   rw   r  rm   )r  r  r$   rl   r  r8   r   rA   r~   r   rn  rf   )	r|   r  r~   rn  rp  r  r  r  r  s	            r^   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal$  s2    	j"2DFFDFF$+	-A 	BF&tvvtvvVLGAtGAJ'E%d1gtvv6%c%j#dii.A		B 	j"2DFFDFF$*3V	M0 	FFDtvv;q=D&s$$&GAt &d1gtvv6%c$iTYY@DD&s$$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF ffTlV+GffTlV+G&s'79K$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF3	Fr`   c                    t        j                  dg      }t        j                  g       }t        ||d      }|j                  dk(  sJ t	        ||       t        ||dd      \  }}|j                  dk(  sJ |j                  dk(  sJ t	        ||       t	        |t        d	gg             t        ||d
d      \  }}|j
                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y)zSee gh-20075rR  Tr  rb   r   r   r  rR   rP  rm   )r   r   r   r   r   N)rT   r4   r$   ndimr   r   r@   )r|   r}   r   xr4  s        r^   test_eigh_tridiagonal_1x1z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N  s    HHdVHHRLQ5vv{{11SvF1vv{{vv{{152$=)1SwG1vv{{ww$ww&   r`   N)	r   r   r   rM  r  r  r  r  r  r   r`   r^   r  r    s$     8 HD(FT!r`   r  c                      e Zd Zd Zd Zd Zd Zed        Ze	j                  j                  de      e	j                  j                  dd      d	               Ze	j                  j                  dd      d
        Ze	j                  j                  dd      e	j                  j                  dd      d               Zd Ze	j                  j                  deeej(                  eej,                  g      d        Zy)TestEighc           	         t        t        t        t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      ddgddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      d	dg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg
       t        t        t        t        j                  ddg      d       t        t        t        t        j                  ddg      d d       t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      dddg       t        t        t        t        j                  ddg      t        j                  ddg      dddg       y )Nrb   rR   rt   r<  )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r  r  r   rT   r   rL  s    r^   test_wrong_inputszTestEigh.test_wrong_inputsb  sT   j$A8j$A!QIj$A!QIj$A!Q	 	j$A!Q'(!fq!f	F 	j$A!Q'(!f	. 	j$A!Q')1g	/ 	j$A!Q'(!f	. 	j$A!Q'(!f	. 	j$AHj$AeLj$A!Q"	$ 	j$A!Q"QF	<j$A!Q"QF	<r`   c           	          t        t        t        t        j                  ddg      t        j                  ddg             y )Nrt   )r  r'   r   rT   r   rL  s    r^   test_nonpositive_bzTestEigh.test_nonpositive_b  s(    k4!Q"''1a&/Jr`   c                    t        t              D ]  \  }}t        d|      }t        |ddg      \  }}t	        |j
                  d   t        |             t        |dkD  |dk  z        sJ t        dd|      }t        ||ddg      \  }}t	        |j
                  d   t        |             t        |dkD  |dk  z        rJ  y )	N   r   r   rR   r  rb   T)r[   r\   )	enumerateDTYPESr_   r   r   r@   rf   r   )r|   indr   r}   r~   rm   r   s          r^   test_value_subsetszTestEigh.test_value_subsets  s     ( 
	+GC(26AB73DAqSV,B1q5)***(DCA1r1g6DAqSV,B1q5)***
	+r`   c                     t        ddgddgg      }t        ddgddgg      }t        |      \  }}t        ||      \  }}y )Nrb   rR      rt   rv   )r4   r   )r|   r}   r   r~   zs        r^   test_eigh_integerzTestEigh.test_eigh_integer  sL    Aq6Aq6"#Aq6Aq6"#Aw1Aqz1r`   c                     dd l }|j                  j                  d      j                         }t	        j
                  |      }t        t        t        |       t        t        t        |       y )Nr   rR   )	scipy.sparsesparseidentitytocscrT   
atleast_2dr  r  r   )r|   scipyr}   r   s       r^   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse  sJ     	LL!!!$**,MM!j$*j$*r`   dtype_r  )rg  evdr  evxc                     t        d|      }t        ||      \  }}t        ||z  ||z  z
  ddt        j                  |      j
                  z  d       y )Nr  )rZ   r\   r  ru    r   r   )r_   r   r   rT   finfoeps)r|   r  r  r}   r~   rm   s         r^   test_various_drivers_standardz&TestEigh.test_various_drivers_standard  sR     %r8Af%1AQ!"((6"2"6"66	!r`   c                    t        dgg|      \  }}t        |t        dg      d       t        |t        dgg      d       t        dgg|      \  }}t        |t        dg      d       t        |t        dgg      d       y )Nrb   r  rP  V瞯<r,  rQ   r   )r   r   r4   )r|   r  r~   rm   s       r^   test_1x1_lworkzTestEigh.test_1x1_lwork  sx    aSE&)15";U352$=u5 bTF6*15!:E252$=u5r`   r  rs   )gvr  r  c                 <   t        j                  d      }t        d      }t        dd      }t        ||||      \  }}|dk(  rt	        ||z  |||z  z  z
  d|d       y |d	k(  rt	        ||z  |z  ||z  z
  d|d       y t	        ||z  |z  ||z  z
  d|d       y )
Ng     @r  T)r[   )r}   r   r  r  rb   ru  r  rR   )rT   spacingr_   r   r   )r|   r  r  r   r}   r   r~   rm   s           r^    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalized  s     zz% $R($R5a1V$7119AEAq1uI-r2FQYAEAIA-r2FAEAIA-r2Fr`   c                 z   t        d      }t        |ddg      }t        t        |      d       t        |ddg      }t        t        |      d       t	        ||       t        j                  g d      }t        |ddg      }t        t        |      d       t	        |t        j                  dd	g             y )
Nrv   rb   rR   r  )rb   333333??      ?rR   gffffff?r  r  r	  )r_   r   r   rf   r   rT   r5   r4   )r|   r}   r~   w2r   w3s         r^   test_eigvalsh_new_argszTestEigh.test_eigvalsh_new_args  s    $Q'QA/SVQa!Q0SWa 2GG)*a!S2SWa BHHc3Z01r`   r   c                    t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      }t        |t        j                  d             |j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rR   r   Tr  )rT   r   r   rF   r@   r\   r   )r|   r   r}   r~   rm   r7  r  s          r^   r   zTestEigh.test_empty  s    HHV2&Aw1q+,Sww$ww#))###ww&   ww#))###&288D>*ww$ww#))###r`   N)r   r   r   r  r  r  r  rK   r  r   r   r   r  r  r  r  r  re   r   rT   r;   r   r<   r   r   r`   r^   r  r  a  s   $<LK+ + + [[Xv.[[X'BC! D /! [[X'BC6 D6 [[VY/[[X';<
G = 0
G2 [[TC

GR\\#RS$ T$r`   r  c                   L   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   j#                  e d      ej                   j&                  d               Zej                   j+                  dg d      ej                   j+                  dg d      ej                   j+                  de      d                      Zej                   j+                  deeej6                  eej:                  g      ej                   j+                  dg d      d               Zy)TestSVD_GESDDgesddc                 h    t        t        t        dggd       t        t        t        dggd       y )NrP  r  r  )r  rg   r   r  rL  s    r^   r  zTestSVD_GESDD.test_degenerate  s&    itfB?j#vUCr`   c                    g dg dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nrs   rb   r  rt   ru   TFfull_matricesr  rt   r   r   r  r   rX   rF   r9   r@   r\   charr   rf   r|   r}   r  r  svhsigmar   s           r^   r   zTestSVD_GESDD.test_simple  s    
I.* 	9M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r`   c                    g dg dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nrs   ru   r  r  rt   r   r  r  s           r^   test_simple_singularz"TestSVD_GESDD.test_simple_singular  s    	9-* 	9M1M)-););=HAq"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r`   c                    g dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        |j
                  d                t        |j
                  d   |j
                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nrs   r<  rv   rw   r  r  r   r   r  r   rX   rF   r@   r9   r\   r  r   rf   r  s           r^   test_simple_underdetz"TestSVD_GESDD.test_simple_underdet
  s    	"* 	9M1M)-););=HAq"%accAgs1771:?1771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r`   c                    ddgddgddgg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        |j
                  d                t        |j                  |z  t	        d             t        |j
                  d   |j
                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )	Nrb   rR   r<  rv   rt   r  r  r   r"  r  s           r^   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet  s    VaVaV$* 	9M1M)-););=HAq"%accAgs1771:?%bddRiQ81771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r`   c           
         t         j                  j                  d      }d}d}t        d      D ]   }|j                  ||g      |j                  ||g      fD ]  }dD ]  }t	        ||| j
                        \  }}}	t        |j                  |z  t        |j                  d                t        |	|	j                  z  t        |	j                  d                t        |j                  d   |	j                  d   f|j                  j                        }
t        t        |            D ]  }||   |
||f<    t        ||
z  |	z  |         # y )	Nr  r  r   rt   r  r  rb   r   )rT   rU   r  r   r   r  r   rX   rF   r@   r9   r\   r  rf   )r|   rj   rZ   mr   r}   r  r  r  r  r  s              r^   test_randomzTestSVD_GESDD.test_random!  s4   ii##D)q 
	AAjj!Q(#**aV*<= 	A%2 AM"1M151C1C EHAq"-accAgs1771:G-b244iRXXa[9IJ!1771:rxx{";QWW\\JE"3q6] +&'dad+-a%i"na@A	A
	Ar`   c                 :   g dg dg dg}dD ]
  }t        ||| j                        \  }}}t        |j                         j                  |z  t        |j                  d                t        |j                         j                  |z  t        |j                  d                t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nrs   )rb   y               @rt   ru   r  r  rb   r   )r   r  r   rW   rX   rF   r@   r9   r\   r  r   rf   r  s           r^   r   z!TestSVD_GESDD.test_simple_complex1  s    
I.* 	9M1M)-););=HAq"%affhjj1nc!''!*oF%bggikkB&6BHHQK8HI1771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r`   c           
         t         j                  j                  d      }d}d}t        d      D ]+  }dD ]"  }|j                  ||g      |j                  ||g      fD ]  }|d|j                  t	        |j
                              z  z   }t        ||| j                        \  }}}	t        |j                         j                  |z  t        |j
                  d                t        |j
                  d   |	j
                  d	   f|j                  j                        }
t        t        |            D ]  }||   |
||f<    t        ||
z  |	z  |        % . y )
Nr  r  r   rt   r  rQ   r  rb   r   )rT   rU   r  r   listr@   r   r  r   rW   rX   rF   r9   r\   r  rf   )r|   rj   rZ   r'  r   r  r}   r  r  r  r  s              r^   test_random_complexz!TestSVD_GESDD.test_random_complex=  s@   ii##D)q 	AA!. A**aV,cjj!Q.@A AABszz$qww-888A"1M151C1C EHAq"-affhjj1n.1!''!*o?
 "1771:rxx{";QWW\\JE"3q6] +&'dad+-a%i"na@AA	Ar`   c                 H   t         j                  j                  d      }g d}|D ]z  }t         j                  t         j                  t         j
                  t         j                  fD ]7  } |j                  | j                  |      }t        || j                         9 | y )Nr  ))r   r   )r   2   )<   r  r  )rT   rU   r  r;   r%  r<   rF  rV   rY   r   r  )r|   rj   sizesszr   r}   s         r^   test_crash_1580zTestSVD_GESDD.test_crash_1580Q  s|    ii##D)/ 	9Bzz2::r||R]]K 9CHHbM((,AT%7%789	9r`   c                    g dg dg dg}t        |d| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |       y )Nrs   r  ru   F)r   r  rt   r   r  )r|   r}   r  r  r  r  r   s          r^   r  zTestSVD_GESDD.test_check_finiteZ  s    
I.quD<N<NO1b!!##'3q62!"$$)SV4qwwqz288A;/>s1v 	AA$E!Q$K	!!e)b.!4r`   c                 t    t        j                  g dg dg dg dg      }t        || j                         y )N)K}\UU?vWUU?r5  ru  ru  ru  )ru  r5  r6  r5  ru  ru  )ru  ru  r5  r6  r5  ru  )ru  ru  ru  r5  r6  r5  r  )rT   r4   r   r  )r|   r   s     r^   test_gh_5039zTestSVD_GESDD.test_gh_5039d  s6     HH====?@
 	AT//0r`   z64-bit LAPACK requiredreasonc                     t        d       t        j                  ddgt        j                        }d|d<   t	        |d      \  }}}t        |d	   d
       t        |d   |d   z  d
       y )NihB  )free_mbrb   l        r   r  Fr  r   rP  r   )rI   rT   r9   r;   r   r   )r|   r]   r  r  r  s        r^   test_large_matrixzTestSVD_GESDD.test_large_matrixu  sd     	%(HHaZrzz2%q.1b!c"$"U)+S1r`   r'  r   rb   rR   rZ   r\   c                    t        j                  ||f|      }t        ||      }|j                  j                  }|dv r|j                         n|}t        |      \  }}	}
t        |j                  ||f       t        |j                  |       t        |	j                  |f       t        |	j                  t        j                  |             t        |
j                  ||f       t        |
j                  |       t        |d      \  }}	}
t        |j                  ||f       t        |j                  |       t        |	j                  |f       t        |	j                  t        j                  |             t        |
j                  ||f       t        |
j                  |       t        |d      }	t        |	j                  |f       t        |	j                  t        j                  |             y )Nr   FDFr<  
compute_uv)	rT   r9   minr\   r  lowerr   r   r@   )r|   r'  rZ   r\   r}   r  dchar
real_dcharr  r  rm   s              r^   test_shape_dtypezTestSVD_GESDD.test_shape_dtype  se    HHaV5)1I&+tmU[[]
a&1aQWWq!f%QWWe$QWWqd#QWWbhhz23QWWq!f%QWWe$au-1aQWWq!f%QWWe$QWWqd#QWWbhhz23QWWq!f%QWWe$e$QWWqd#QWWbhhz23r`   r   r'  rZ   r   r   r   c                    t        j                  d|      }t        |      \  }}}t        j                  ||f|      }t        |      \  }	}
}t	        |	t        j
                  |             t	        |
t        j                  d             t	        |t        j
                  |             |	j                  |j                  k(  sJ |j                  |j                  k(  sJ |
j                  |j                  k(  sJ t        |d      \  }	}
}t	        |	t        j                  |df             t	        |
t        j                  d             t	        |t        j                  d|f             |	j                  |j                  k(  sJ |j                  |j                  k(  sJ |
j                  |j                  k(  sJ t        |d      }
t	        |
t        j                  d             |
j                  |j                  k(  sJ y )Nrt   r   r   Fr<  r   rA  )rT   rF   r   r   r   r  r\   )r|   r   r'  rZ   a0u0s0r   r}   r  r  rm   s               r^   r   zTestSVD_GESDD.test_empty  s    VVAR W
BHHaV2&a&1a2;;q>*288D>*2;;q>*ww"(("""ww"(("""ww"(("""au-1a288QF+,288D>*288QF+,ww"(("""ww"(("""ww"(("""e$288D>*ww"(("""r`   N)r   r   r   r  r  r   r  r#  r%  r(  r   r,  r2  r  r7  r   r   skipifrJ   slowr=  r   r  rG  re   r   rT   r;   r   r<   r   r   r`   r^   r  r    s*   MD
9
9	9
9A 
9A(951" [[I.FG[[2  H2 [[S),[[S),[[Wf-4 . - -44 [[TC

GR\\#RS[[Z)AB# C T#r`   r  c                       e Zd ZdZy)TestSVD_GESVDgesvdN)r   r   r   r  r   r`   r^   rQ  rQ    s    Mr`   rQ  zout of memory in WASMr8  z#out of memory in 32-bit CI workflowrR   rO  c                      t        j                  dt         j                        } t        t              5  t        |        d d d        y # 1 sw Y   y xY w)N)i  i  r   )rT   r   r%  r  r  r   )dfs    r^   test_svd_gesdd_nofegfaultrU    s<     
ww}BJJ/B	z	" B  s   A

Ac                      t        j                  d      } t         j                  | d<   t        j                  t
        d      5  t        | d       d d d        y # 1 sw Y   y xY w)NrR   r   NaN)matchFr   )rT   rF   nanr   r	   r  r   r]   s    r^   test_gesdd_nan_error_messager[    sI    
q	AffAdG	z	/ #AE"# # #s   AA$c                       e Zd Zej                  j                  deeej                  e
ej                  g      d        Zd Zd Zd Zd Zd Zd Zd	 Zej                  j(                  d
        Zy)TestSVDValsr   c                 ^   g gt        j                  d      t        j                  d      fD ]~  }t        j                  ||      }t	        |      }t        |t        j                  d             t	        t        j                  d|            }|j                  |j                  k(  r~J  y )Nr   r   rt   r   r   rR   )rT   r   r   r4   r   r   rF   r\   )r|   r   r}   r  rM  s        r^   r   zTestSVDVals.test_empty  s    rxx'8 	'A"%A
ABHHQK(,-B77bhh&&&	'r`   c                     g dg dg dg}t        |      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )Nrs   ru   rt   r   rb   rR   r   r   rf   r|   r}   r  s      r^   r   zTestSVDVals.test_simple  sK    	9-AJA!!!$!$%$%r`   c                     g dg dg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nrs   r!  rR   r   rb   ra  rb  s      r^   r#  z TestSVDVals.test_simple_underdet  s9    	"AJA!!!r`   c                     ddgddgddgg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nrb   rR   r<  rv   rt   r   ra  rb  s      r^   r%  zTestSVDVals.test_simple_overdet  sG    VaVaV$AJA!!!r`   c                     g dg dg dg}t        |      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )Nrs   )rb   r                @ru   rt   r   rb   rR   ra  rb  s      r^   r   zTestSVDVals.test_simple_complex  sK    Y/AJA!!!$!$%$%r`   c                     g dg dg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nrs   )r<  y              @rw   rR   r   rb   ra  rb  s      r^   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complex  s9    
#AJA!!!r`   c                     ddgddgddgg}t        |      }t        t        |      dk(         t        |d   |d   k\         y )Nrb   rR   r<  rv   rf  r   ra  rb  s      r^   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complex  sG    VaVb!W%AJA!!!r`   c                     g dg dg dg}t        |d      }t        t        |      dk(         t        |d   |d   cxk\  xr |d   k\         y c        y )	Nrs   ru   Fr   rt   r   rb   rR   ra  rb  s      r^   r  zTestSVDVals.test_check_finite  sN    	9-AE*A!!!$!$%$%r`   c                 z    t         j                  j                  d      }|j                  d      }t        |       y )Nr  )i  i
  )rT   rU   r=  r   )r|   rj   r}   s      r^   test_crash_2609zTestSVDVals.test_crash_2609	  s+    ii##D)JJ|$
r`   N)r   r   r   r   r   r   re   r   rT   r;   r   r<   r   r   r#  r%  r   rh  rj  r  rO  rm  r   r`   r^   r]  r]    sz    [[TC

GR\\#RS' T'&&& [[ r`   r]  c                       e Zd Zd Zy)TestDiagSVDc                 H    t        t        g ddd      g dg dg dg       y )Nrb   r   r   rt   r   )r   r   rL  s    r^   r   zTestDiagSVD.test_simple  s     !')Q":#,i"C	Er`   N)r   r   r   r   r   r`   r^   ro  ro    s    Er`   ro  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6e7jp                  js                  d5g d6      e7jp                  js                  d7g d6      e7jp                  js                  d8d9d:g      e7jp                  js                  d;e:      d<                             Z;e7jp                  js                  d=g d>      d?        Z<d@ Z=yA)BTestQRc                     g dg dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y N   rR   rt   rR   rx   rt   rv   rt   rw   rt   r   r   rX   rF   r|   r}   qrs       r^   r   zTestQR.test_simple  s?    	9-!u1!!##'3q62!!a%+r`   c                     g dg dg dg}t        |      \  }}g d}t        ||d      \  }}t        ||z  |       t        ||       t        |t        d      d      \  }}t        ||       y )Nrv  rx  ry  rs   r   rt   r   r   r   rF   r|   r}   r|  r}  cqcr2s          r^   test_simple_leftzTestQR.test_simple_left  sj    	9-!u1Q6*B!!a%,!!R(QA/B!!R(r`   c                     g dg dg dg}t        |      \  }}g d}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )Nrv  rx  ry  rs   rt   r  r  s          r^   test_simple_rightzTestQR.test_simple_right)  sf    	9-!u1Q"B!!a%,!!R(As1v&A!!R(r`   c                    t        j                  g dg dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )	Nrv  rx  ry  Tpivotingrb   r   rt   
rT   rC   r   r   r5   r   r   r   rX   rF   r|   r}   r|  r}  prl   q2r  s           r^   test_simple_pivotingzTestQR.test_simple_pivoting3  s    JJ	9i89Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r`   c                     g dg dg dg}t        |d      \  }}}g d}t        ||dd      \  }}}t        ||z  |       y )Nrv  rx  ry  Tr  rs   r   r   r   r   r|   r}   r|  r}  jpvtr  r  s          r^   test_simple_left_pivotingz TestQR.test_simple_left_pivoting>  sI    	9-D)
1d!!Q5At!!a%,r`   c                     g dg dg dg}t        |d      \  }}}g d}t        ||d      \  }}}t        ||z  |       y )Nrv  rx  ry  Tr  rs   r  r  s          r^   test_simple_right_pivotingz!TestQR.test_simple_right_pivotingE  sG    	9-D)
1d!!Q6At!!a%,r`   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y )Nrv  rx  rR   rz  r{  s       r^   test_simple_trapzTestQR.test_simple_trapL  =    	"!u1!!##'3q62!!a%+r`   c                    t        j                  g dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )Nrv  rx  Tr  rb   r   rR   r  r  s           r^   test_simple_trap_pivotingz TestQR.test_simple_trap_pivotingR  s    JJ	9-.Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r`   c                     ddgddgddgg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y Nrw  rR   rx   rv   rt   rz  r{  s       r^   test_simple_tallzTestQR.test_simple_tall]  sK    VaVaV$!u1!!##'3q62!!a%+r`   c                    t        j                  ddgddgddgg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d	 k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )
Nrw  rR   rx   rv   rt   Tr  rb   r   r  r  s           r^   test_simple_tall_pivotingz TestQR.test_simple_tall_pivotingd  s    JJAAA/0Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r`   c                     ddgddgddgg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d	       y )
Nrw  rR   rx   rv   rt   economicmoder;  rR   rR   r   r   rX   rF   r   r@   r{  s       r^   test_simple_tall_ezTestQR.test_simple_tall_ep  sj    VaVaV$!*%1!!##'3q62!!a%+QWWf%QWWf%r`   c                    t        j                  ddgddgddgg      }t        |dd      \  }}}t        t	        |            }t        t        j                  |d	d  |d d
 k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f   d      \  }}t        ||       t        ||       y )Nrw  rR   rx   rv   rt   Tr  r  r  rb   r   r  r  r  s           r^   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivotingy  s    JJAAA/0QJ71aQLqu#2'(!!##'3q62!!a%1a41AadG*-B!!R(!!R(r`   c                 D   ddgddgddgg}t        |d      \  }}ddg}t        ||d	      \  }}t        ||z  |       t        ||       t        g d
      }t        ||d	d      \  }}t        ||d d z  |       t        |t	        d      d	      \  }}t        ||       y )Nrw  rR   rx   rv   rt   r  r  rb   r   rb   rR   r   Toverwrite_cr   r   r   r4   rF   r  s          r^   test_simple_tall_leftzTestQR.test_simple_tall_left  s    VaVaV$!*%1FQ6*B!!a%,!!R()Q6t<B!!ae)R0As1vv.A!"a(r`   c                     ddgddgddgg}t        |dd      \  }}}d	dg}t        ||d
d      \  }}}t        ||       t        ||z  |       t        |t	        d      d
d      \  }}}t        ||       y )Nrw  rR   rx   rv   rt   r  Tr  r  rb   r   )r   r   r   r   rF   )r|   r}   r|  r}  r  r  r  kpvts           r^   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivoting  s    VaVaV$
T:
1dF!!Q5At4&!!a%,!!SVVT:At!"a(r`   c                     ddgddgddgg}t        |d      \  }}g d}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )	Nrw  rR   rx   rv   rt   r  r  rs   r  r|   r}   r|  r}  r  cqr  s          r^   test_simple_tall_rightzTestQR.test_simple_tall_right  su    VaVaV$!*%1Q"B!!a%,!!R(As1v&A!"a(r`   c                     ddgddgddgg}t        |dd      \  }}}g d	}t        ||d
      \  }}}t        ||z  |       t        |t        d      d
      \  }}}t        ||       y )Nrw  rR   rx   rv   rt   Tr  r  rs   r  r  r|   r}   r|  r}  r  r  r  s          r^   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivoting  sw    VaVaV$Dz:
1d!!Q6At!!a%,!!SVd;At!"a(r`   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d       y )Nrw  rR   rv   rx  rR   r  rR   rt   r  r{  s       r^   test_simple_fatzTestQR.test_simple_fat  sY    	"!u1!!##'3q62!!a%+QWWf%QWWf%r`   c                    t        j                  g dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |j                  d       t        |j                  d	       t        |d d |f         \  }}t        ||       t        ||       y )
Nr  rx  Tr  rb   r   rR   r  r  rT   rC   r   r   r5   r   r   r   rX   rF   r   r@   r  s           r^   test_simple_fat_pivotingzTestQR.test_simple_fat_pivoting  s    JJ	9-.Q&1aQLqu#2'(!!##'3q62!!a%1a41QWWf%QWWf%AadGB!!R(!!R(r`   c                     g dg dg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d       y )Nrv  rR   rx   rv   r  r  rR   r  r  r  r{  s       r^   test_simple_fat_ezTestQR.test_simple_fat_e  s\    	"!*%1!!##'3q62!!a%+QWWf%QWWf%r`   c                    t        j                  g dg dg      }t        |dd      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |j                  d	       t        |j                  d
       t        |d d |f   d      \  }}t        ||       t        ||       y )Nrv  r  Tr  r  rb   r   rR   r  r  r  r  r  s           r^   test_simple_fat_e_pivotingz!TestQR.test_simple_fat_e_pivoting  s    JJ	9-.QJ71aQLqu#2'(!!##'3q62!!a%1a41QWWf%QWWf%AadG*-B!!R(!!R(r`   c                     g dg dg}t        |d      \  }}ddg}t        ||d      \  }}t        ||z  |       t        ||       t        |t        d      d      \  }}t        ||       y )Nrv  r  r  r  rb   rR   r   r  r  s          r^   test_simple_fat_leftzTestQR.test_simple_fat_left  so    	"!*%1FQ6*B!!a%,!!R(As1vv.A!"a(r`   c                     g dg dg}t        |dd      \  }}}ddg}t        ||dd      \  }}}t        ||z  |       t        |t        d      dd      \  }}}t        ||       y )	Nrv  r  r  Tr  rb   rR   r   r  r  s          r^   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting  sq    	"
T:
1dF!!Q5At!!a%,!!SVVT:At!"a(r`   c                     g dg dg}t        |d      \  }}ddg}t        ||      \  }}t        ||z  |       t        ||       t        |t        d            \  }}t        ||       y )Nrv  r  r  r  rb   rR   r  r  s          r^   test_simple_fat_rightzTestQR.test_simple_fat_right  sk    	"!*%1FQ"B!!a%,!!R(As1v&A!"a(r`   c                     g dg dg}t        |dd      \  }}}ddg}t        ||d      \  }}}t        ||z  |       t        |t        d      d      \  }}}t        ||       y )	Nrv  r  Tr  r  rb   rR   r  r  r  s          r^   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivoting  sm    	"Dz:
1dF!!Q6At!!a%,!!SVd;At!"a(r`   c                     g dg dg dg}t        |      \  }}t        |j                         j                  |z  t	        d             t        ||z  |       y Nrt         @      @rv   rv   rR   y       @      @rt   rR   r  rt   )r   r   rW   rX   rF   r{  s       r^   r   zTestQR.test_simple_complex  sE    <3!u1!!&&(**q.#a&9!!a%+r`   c                     g dg dg dg}t        |      \  }}g d}t        ||d      \  }}t        ||z  |       t        |t        d      d      \  }}t        ||       y )Nr  r  r  rb   rR   r  r   rt   r  r|   r}   r|  r}  r  r  s         r^   test_simple_complex_leftzTestQR.test_simple_complex_left	  s`    <3!u1Aq&)A!!a%,As1vv.A!!R(r`   c                     g dg dg dg}t        |      \  }}g d}t        ||      \  }}t        ||z  |       t        |t        d            \  }}t        ||       y )Nr  r  r  r  rt   r  r  s         r^   test_simple_complex_rightz TestQR.test_simple_complex_right  s\    <3!u1Aq!A!!a%,As1v&A!!R(r`   c                 D   ddgddgddgg}t        |d      \  }}d	d
g}t        ||d      \  }}t        ||z  |       t        ||       t        g d      }t        ||dd      \  }}t        ||d d z  |       t        |t	        d      d      \  }}t        ||       y )Nrw  y       @      @rR   rx   y      @      @rt   r  r  rb          @       @r   r  Tr  r  r  s          r^   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_left  s    YAq	*!*%1IQ6*B!!a%,!!R()Q6t<B!!ae)R0As1vv.A!"a(r`   c                     g dg dg dg}t        |      \  }}g d}t        ||dd      \  }}t        |j                         |z  |       y )Nr  r  r  r  r   T	conjugater   r   r   rW   r  s         r^   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugate(  sH    <3!u1Aq&D9A!!&&(Q,3r`   c                     ddgddgddgg}t        |d      \  }}ddg}t        ||d	d
      \  }}t        |j                         |z  |       y )Nrt   r  rv   r  rR   r  r  rb   r   Tr  r  r  s         r^   'test_simple_complex_tall_left_conjugatez.TestQR.test_simple_complex_tall_left_conjugate/  s[    YD	Aq6*!*%1IAq&D9A!!&&(Q,3r`   c                     g dg dg dg}t        |      \  }}t        j                  g d      }t        ||d      \  }}t	        ||j                         z  |       y )Nr  r  r  r  Tr  )r   rT   r4   r   r   rW   r  s         r^   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate6  sO    <3!u1HH\"AqD1A!!affh,3r`   c                    t        g dg dg dg      }t        |d      \  }}}t        t        |            }t	        t        j                  |dd  |d d k               t        |j                         j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )	Nr  r  r  Tr  rb   r   rt   )r4   r   r   r5   r   rT   r   r   rW   rX   rF   r  s           r^   test_simple_complex_pivotingz#TestQR.test_simple_complex_pivoting=  s    <y9:Q&1aQLqu#2'(!!&&(**q.#a&9!!a%1a41AadGB!!R(!!R(r`   c                     t        g dg dg dg      }t        |d      \  }}}g d}t        ||dd      \  }}}t        ||z  |       y )Nr  r  r  Tr  r  r   r4   r   r   r   r  s          r^   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivotingH  sN    <y9:D)
1d!!Q5At!!a%,r`   c                     t        g dg dg dg      }t        |d      \  }}}g d}t        ||d      \  }}}t        ||z  |       y )Nr  r  r  Tr  r  r  r  s          r^   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivotingO  sL    <y9:D)
1d!!Q6At!!a%,r`   c                 
   t         j                  j                  d      }d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr  r  rR   rT   rU   r  r   r   r   rX   rF   r|   rj   rZ   r  r}   r|  r}  s          r^   r(  zTestQR.test_randomV  sq    ii##D)q 	0A

Aq6"Aa5DAq%accAgs1v6%a!eQ/		0r`   c                 T   t         j                  j                  d      }d}t        d      D ]y  }|j                  ||g      }t	        |      \  }}|j                  |g      }t        ||d      \  }}t        ||z  |       t        |t        |      d      \  }}t        ||       { y )Nr  r  rR   r   rT   rU   r  r   r   r   r   rF   	r|   rj   rZ   r  r}   r|  r}  r  r  s	            r^   test_random_leftzTestQR.test_random_left_  s    ii##D)q 	-A

Aq6"Aa5DAq

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

Aq6"Aa5DAq

A3A1%EB%a!eR03q6*EB%a,	-r`   c           	         t         j                  j                  d      }d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}}t        t        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }	}
t        ||	       t        ||
        y )Nr  r  rR   Tr  rb   r   rT   rU   r  r   r   r   r5   r   r   r   rX   rF   r|   rj   rZ   r  r}   r|  r}  r  rl   r  r  s              r^   test_random_pivotingzTestQR.test_random_pivotingw  s    ii##D)q 		-A

Aq6"AT*GAq!DGABFF1QR5AcrF?+,%accAgs1v6%a!eQq!tW5!Q$[FB%a,%a,		-r`   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr     r  rR   r  r|   rj   r'  rZ   r  r}   r|  r}  s           r^   test_random_tallzTestQR.test_random_tall  sv    ii##D)q 	0A

Aq6"Aa5DAq%accAgs1v6%a!eQ/		0r`   c                 \   t         j                  j                  d      }d}d}t        d      D ]{  }|j                  ||g      }t	        |d      \  }}|j                  |g      }t        ||d      \  }	}t        ||z  |	       t        |t        |      d      \  }	}t        |	|       } y )Nr  r  r  rR   r  r  r   r  )
r|   rj   r'  rZ   r  r}   r|  r}  r  r  s
             r^   test_random_tall_leftzTestQR.test_random_tall_left  s    ii##D)q 	-A

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

A3A1f-EB%a!eR03q662EB%b!,	-r`   c                 X   t         j                  j                  d      }d}d}t        d      D ]y  }|j                  ||g      }t	        |d      \  }}|j                  |g      }t        ||      \  }	}t        ||z  |	       t        |t        |            \  }	}t        |	|       { y Nr  r  r  rR   r  r  r  )
r|   rj   r'  rZ   r  r}   r|  r}  r  r  s
             r^   test_random_tall_rightzTestQR.test_random_tall_right  s    ii##D)q 	-A

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

A3A1%EB%a!eR03q6*EB%b!,	-r`   c           	         t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}}t        t        |            }	t        t        j                  |	dd  |	d d k               t        |j                  |z  t        |             t        ||z  |d d |f          t	        |d d |f         \  }
}t        ||
       t        ||        y )	Nr  r  r  rR   Tr  rb   r   r  r|   rj   r'  rZ   r  r}   r|  r}  r  rl   r  r  s               r^   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s    ii##D)q 		-A

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

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

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

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

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

Aq6"R

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

Aq6"R

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

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

Aq6"R

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

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

Aq6"R

Aq6(:%::AT*GAq!DGABFF1QR5AcrF?+,%affhjj1nc!f=%a!eQq!tW5!Q$[FB%a,%a,		-r`   c                     g dg dg dg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       y Nrv  rx  ry  Fr   rt   rz  r{  s       r^   r  zTestQR.test_check_finite#  sB    	9-!%(1!!##'3q62!!a%+r`   c                    g dg dg dg}t        |d       \  }}t        |d      \  }}t        ||       t        ||       t        |d      \  }}t        ||       t        ||       t        |d      \  }}	t        ||       t        |	|       t        t        t         |fdd	i       t        t        t         |fdd
i       y )Nrv  rx  ry  )lworkrt   rO  r   r  r   rR   )r   r   r  	Exception)
r|   r}   r|  r}  r  r  q3r3q4r4s
             r^   
test_lworkzTestQR.test_lwork)  s    	9-!4 1 AQB!"a(!"a( ARB!"a(!"a( ARB!"a(!"a( 	iaTGQ<8iaTGQ<8r`   r'  r>  rZ   r  FTr\   c                 `   t        ||      }t        j                  ||f|      }t        ||      ^}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^}}	t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r?|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         t        |d|      ^\  }}}}	t	        |j
                  ||f       t	        |j                  |       t	        |j
                  |f       t	        |j                  |       t	        |j
                  ||f       t	        |j                  |       t        |	      |rdndk(  sJ |r@|	\  }
t	        |
j
                  |f       t	        |
j                  t        j                         y y )	Nr   r  rb   r   r}  r  r  raw)	rC  rT   r9   r   r   r@   r\   rf   int32)r|   r'  rZ   r  r\   r  r}   r|  r}  otherr  r&  taus                r^   rG  zTestQR.test_shape_dtypeA  s   
 1IHHaV5)!h/1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+qsX6	EQWWq!f%QWWe$5z8a333BA1$'"((+!*x@1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+ "158 D
cASYYA'SYY&SYY%SYY&QWWq!f%QWWe$5z8a333BA1$'"((+ r`   rH  rI  c                    t        ||      }t        j                  ||f      }t        |      \  }}t	        |t        j
                  |             t	        |t        j                  ||f             t        |d      \  }}}t	        |t        j
                  |             t	        |t        j                  ||f             t	        |t        j                  |             t        |d      \  }t	        |t        j                  ||f             t        |d      \  }}t	        |t        j                  ||f             t	        |t        j                  ||f             t        |d      \  \  }}	}t	        |t        j                  ||f             t	        |	t        j                  |f             t	        |t        j                  ||f             y )NTr  r}  r  r  r&  )rC  rT   r   r   r   r  r:   )
r|   r'  rZ   r  r}   r|  r}  r  r&  r)  s
             r^   r   zTestQR.test_emptyu  sZ   1IHHaV!u12;;q>*288QF+,Q&1a2;;q>*288QF+,299Q<(_288QF+,!*%1288QF+,288QF+,15)
cARXXq!f-.RXXqd^,288QF+,r`   c                    t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             t        j                  d      }t        j                  d      }t        ||      \  }}t        |t        j                  d             y )Nr   r   r   )rT   r   r   r   )r|   r}   r  r  r}  s        r^   test_multiply_emptyzTestQR.test_multiply_empty  s    HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-r`   N)>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   r  rG  r   r,  r   r`   r^   rs  rs    s   ,))	)--,	),
)&
)))))&)&))))),)))444	)--0
-
--	0--- *-$0-0
-
--,90 [[S),[[S),[[Z%7[[Wf-., . 8 - -.,` [[Z)AB- C-2.r`   rs  c                   j   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  j%                  dg d      ej"                  j%                  dg d      ej"                  j%                  de      d                      Zej"                  j%                  dg d      d        Zy)TestRQc                     g dg dg dg}t        |      \  }}t        ||j                  z  t        d             t        ||z  |       y ru  r   r   rX   rF   r|   r}   r}  r|  s       r^   r   zTestRQ.test_simple  s?    	9-!u1!!acc'3q62!!a%+r`   c                 h    g dg dg dg}t        |      \  }}t        |d      }t        ||       y )Nrv  rx  ry  r}  r  )r   r   )r|   r}   r}  r|  r  s        r^   test_rzTestRQ.test_r  s0    	9-!u1_!!R(r`   c                 
   t         j                  j                  d      }d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        ||j                  z  t        |             t        ||z  |       V y r  rT   rU   r  r   r   r   rX   rF   r|   rj   rZ   r  r}   r}  r|  s          r^   r(  zTestRQ.test_random  sq    ii##D)q 	0A

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

Aq6"Aa5DAq%a!##gs1v6%a!eQ/		0r`   c                    t         j                  j                  d      }d}d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        ||j                  z  t        |             t        ||z  |       V y r  r5  r<  s           r^   r  zTestRQ.test_random_trap  r=  r`   c                 r   t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      }t	        |d      \  }}t        ||j                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  r  rR   r  r  )
rT   rU   r  r   r   r   rX   rF   r   r@   r<  s           r^   test_random_trap_economicz TestRQ.test_random_trap_economic  s    ii##D)q 	*A

Aq6"Aaj)DAq%a!##gs1v6%a!eQ/1a&)1a&)	*r`   c                 T   t         j                  j                  d      }d}t        d      D ]y  }|j                  ||g      d|j                  ||g      z  z   }t	        |      \  }}t        ||j                         j                  z  t        |             t        ||z  |       { y r  )	rT   rU   r  r   r   r   rW   rX   rF   r6  s          r^   r,  zTestRQ.test_random_complex  s    ii##D)q 	0A

Aq6"R

Aq6(:%::Aa5DAq%a!&&(**nc!f=%a!eQ/		0r`   c                    t         j                  j                  d      }d}d}t        d      D ]  }|j                  ||g      d|j                  ||g      z  z   }t	        |d      \  }}t        ||j                         j                  z  t        |             t        ||z  |       t        |j                  ||f       t        |j                  ||f        y )Nr  r  r  rR   rQ   r  r  )rT   rU   r  r   r   r   rW   rX   rF   r   r@   r<  s           r^   test_random_complex_economicz#TestRQ.test_random_complex_economic  s    ii##D)q 	*A

Aq6"R

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

*ADt H	J 	AFFHJJA7 2	4r`   c           	         g dg dg dg}t        |      \  }}| j                  |||dd       t        |d      \  }}t        t        j                  t        t        |                  xr' t        j                  t        t        |                         | j                  |||dd       t        ||      \  }}| j                  |||dd       y )Nrw     rt   rx  rO  rt   rw   r+  +<r   r   r   )r   rK  r   rT   r3  r=   r?   r   )r|   r}   rJ  r  tczctc2zc2s           r^   r   zTestSchur.test_simple<  s    J/Qx1Aqu59q)$BuYr]+,Mim8L1MNBU;2r?SC5u=r`   zsort, expected_diaglhprR         rc   rhpiucoucc                     | dk\  S )Nru  r   )r  s    r^   <lambda>zTestSchur.<lambda>L  s
    AH r`   c                     g dg dg dg dg}t        ||      \  }}}| j                  |||dd       t        t        j                  |      |d	
       t        d|       y )Nr'  r   rP  rQ  g      g      rQ  rP  r         @      g      @ra  r'  rS        @rA   r+  rP  rQ  -q=r   rR   )r   rK  r   rT   r5   r   )r|   rA   expected_diagr}   rJ  r  sdims          r^   	test_sortzTestSchur.test_sortF  sb     "! 14(
1dAqu59
M>Qr`   c                 |    g dg dg dg dg}t        t        t        |d       t        t        t        |d       y )Nr^  r_  r`  rc  unsupportedre  rb   )r  r  r   )r|   r}   s     r^   test_sort_errorszTestSchur.test_sort_errorsZ  s3    "! 	j%?j%3r`   c                     g dg dg dg}t        |d      \  }}t        ||z  |j                         j                  z  |       y )NrM  rx  rO  Fr   )r   r   rW   rX   )r|   r}   rJ  r  s       r^   r  zTestSchur.test_check_finiteb  s;    J/QU+1!!a%!&&(**"4a8r`   r   c                    t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}t	        |t        j                  d             t	        |t        j                  d             |j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ t        |d      \  }}}t	        |t        j                  d             t	        |t        j                  d             t        |d       |j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rR   rV  re  r   )rT   r   r   rF   r   r\   r   )r|   r   r}   rJ  r  t0z0ri  s           r^   r   zTestSchur.test_emptyg  s    HHV2&Qx1rvvar*+B288F+,288F+,ww"(("""ww"(("""15)
1d288F+,288F+,T1ww"(("""ww"(("""r`   rA   outputr[  r   r\   c                     t        j                  ddgddgg      }t        |j                  |      ||      d   }|dk(  r|dk(  s
J |dk(  sJ y y )N皙?r   rR   rA   rr  r   rY  r   )rT   rC   r   rY   )r|   rA   rr  r\   r]   ri  s         r^   test_gh_13137_sort_strz TestSchur.test_gh_13137_sort_strx  s_      JJb	As8,- QXXe_4?C EMtqy88tqy88yyr`   c                     t        j                  ddgddgg      }|dk(  xr" |t         j                  t         j                  hv d	fd	}t	        |j                  |      ||      d   }r|dk(  s
J |dk(  sJ y y )
Nrt  r   rR   r[  c                     r9t        j                  |       rJ |t        j                  |      sJ | |dz  z   }nt        j                  |       sJ |J | }|j                  dkD  S )NrQ   r  )rT   iscomplexobjisrealr   )r  r  r  all_reals      r^   rA   z1TestSchur.test_gh_13137_sort_custom.<locals>.sort  si    ??1---}155"Hq)))y y66E>!r`   ru  r   rb   rJ  )rT   rC   r;   r%  r   rY   )r|   rr  r\   r]   rA   ri  r{  s         @r^   test_gh_13137_sort_customz#TestSchur.test_gh_13137_sort_custom  s     JJb	As8,-6>Ge

BJJ/G&G		" QXXe_4?C$tqy33$!)33)yr`   N)r   r   r   rK  r   r   r   r   rT   r>   rj  rm  r  re   r   r;   r   r<   r   r%  rF  rv  r|  r   r`   r^   rH  rH  1  s#   4> [[
72771:+tWRWWQZ5	6
'"''!*cGBGGAJ;5	6
$WRWWQZ'"''!*5	6
'"''!*wrwwqzk45	6
wrwwqz3TB	C		E

49
 [[TC

GR\\#RS# T#  [[VeU^4[[X	':;[[Wrzz2::')||R]]'D E9E < 59$ [[X	':;[[Wrzz2::')||R]]'D E4E <4r`   rH  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	eeeeeg      d
        Zy)TestHessenbergc                     g dg dg dg}g dg dg dg}t        |d      \  }}t        |j                  |z  |z  |       t        ||d	
       y )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@rb   calc_qr<  decimalr   r   rX   r|   r}   h1rn   r|  s        r^   r   zTestHessenberg.test_simple  sX     ..!# !A&1!!##'A+q1!!R3r`   c                     g dg dg dg}t        |d      \  }}t        |j                         j                  |z  |z  |       y )Nr  )r  y             f@r  )y             ;r  r  rb   r  )r   r   rW   rX   r|   r}   rn   r|  s       r^   r   z"TestHessenberg.test_simple_complex  sA     !A&1!!&&(**q.1"4a8r`   c                     g dg dg dg dg dg dg dg}t        |d	      \  }}t        |j                  |z  |z  |       y )
N)rb   rR   rt   r<  rv   rw   r  )r   rR   rt   r<  rw   r  rR   )r   rR   rR   rt   r   rt   rR   )r   r   rR   rw  r   r   rR   )r   rt   rb   rR   r   rb   rR   )r   rb   rR   rt   r   rb   r   )r   r   r   r   r   rb   rR   rb   r  r  r  s       r^   test_simple2zTestHessenberg.test_simple2  sF    """""""$ !A&1!!##'A+q1r`   c                     t        j                  d      }d|d<   t        |d      \  }}t        |j                  |z  |z  |       y )Nrt   rR   )r   r   rb   r  )rT   rF   r   r   rX   r  s       r^   test_simple3zTestHessenberg.test_simple3  s>    FF1I%!A&1!!##'A+q1r`   c                     t         j                  j                  d      }d}t        d      D ]A  }|j                  ||g      }t	        |d      \  }}t        |j                  |z  |z  |       C y )Nr  r  rR   rb   r  )rT   rU   r  r   r   r   rX   r|   rj   rZ   r  r}   rn   r|  s          r^   r(  zTestHessenberg.test_random  sf    ii##D)q 	6A

Aq6"Aa*DAq%accAgk15	6r`   c                 .   t         j                  j                  d      }d}t        d      D ]f  }|j                  ||g      d|j                  ||g      z  z   }t	        |d      \  }}t        |j                         j                  |z  |z  |       h y )Nr  r  rR   rQ   rb   r  )rT   rU   r  r   r   r   rW   rX   r  s          r^   r,  z"TestHessenberg.test_random_complex  s    ii##D)q 	=A

Aq6"R

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

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

466!9dffQi55r`   c                    t        j                  d      }t        j                  ddg      }dddgfdddgfdddgfdddgfg}t        j                  d      }t        j                  d	d
g      }dddgfdddgfdddgfdddgfg}t        j                  d      }t        j                  ddg      }ddt         j                  gfddt         j                  gfdt         j                  dgfg}	t        j                  d      }
t        j                  ddg      }ddt         j                  gfddt         j                  gfdt         j                  dgfg}t        j                  ddg      }t        j                  ddg      }ddt         j                  gfddt         j                  gfg}||||
|g}|||||g}|||	||g}t        |||      D ]  \  }}}|D ]  \  }}t        |||      \  }}}}}}|dk(  }|dk(  }t        j                  |      }t         j                  |||z  <   t         j                  || |z  <   ||    ||    z  || <   t        ||         y )NrR   r   rc   rV  rW  rX  rY  rZ  y             ?y      ?      ?yٿɿ      ?      r   rb   re  )	rT   rF   r5   r   rY  r  r    r  r   )r|   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5r]   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzeror  s                                 r^   test_sort_explicitzTestOrdQZ.test_sort_explicit_
  s    VVAYWWb#YdAY'aY'dAY'aY')	 VVAYWWgz*+k>:;nk:;k>:;nk:;=	
 VVAYWWaV_c266]+c266]+bffc]+-	 VVAYWWb!WdBFF^,dBFF^,bffd^,.	 WWaV_WWaXa[)a[)+	 RR RR y)Y	J!$Q8!4 		5BI-6 5))*/BW*E'1eT1a!MM%(#%66%%- $&FF5&5.!!5&M$v,65&	 0!45		5r`   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r	  r  r   r`   r^   r  r  	  sM    4% 4%l
,\,		6-5r`   r  c                       e Zd Zej                  j                  d      d        Zej                  j                  d        Zy)TestOrdQZWorkspaceSizerv   c                 *   t         j                  j                  d      }d}t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X y )Nr     c                     | |k  S rJ  r   r  r  s     r^   r\  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>
  
    UT\ r`   r[  ru  c                     | |k  S rJ  r   r  s     r^   r\  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>
  r   r`   r   )	rT   rU   r  r;   r%  rY   r    rF  r<   )r|   rj   re  ddtyper]   r   r  s          r^   test_decomposez%TestOrdQZWorkspaceSize.test_decompose
  s    ii##E*zz2::. 	%F

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

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

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

Aq6"))&1Aa!A&(A	(r`   c                 ~   t         j                  j                  d      }d}t         j                  t         j                  t         j
                  t         j                  fD ][  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d      \  }}}}	}
}] y )Nr  r  rZ  re  )	rT   rU   r  r;   r%  rF  r<   rY   r    )r|   rj   re  r"  r]   r   SrX   r  r  Ur4  s               r^   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc
  s    ii##E*zz2::r}}bllK 	>F

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

Aq6"))&1A&+Aqu&=#Aq%q!	>r`   N)	r   r   r   r   r   	fail_slowr#  rO  r'  r   r`   r^   r  r  
  sA    [[1( (" [[> >r`   r  c                       e Zd Zd Zy)TestDatacopiedc                 `   ddl m} t        ddgddgg      }t        |      |j	                         }|j                         } G fdd      } G fdd	      } |       } |       }|d
fd
f|df|d
f|d
f|d
ffD ].  \  }	}
t        |	      }t         |||	      |
t        |	             0 y )Nr   )_datacopiedrb   rR   rt   c                       e Zd Zd fd	Zy)-TestDatacopied.test_datacopied.<locals>.Fake1Nc                     S rJ  r   )r|   r\   r   r]   s      r^   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__
  s    r`   )NN)r   r   r   r0  rZ  s   r^   Fake1r.  
  s    r`   r1  c                   (    e Zd ZW  j                  Zy)-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__rZ  s   r^   Fake2r3  
  s    "#"7"7r`   r5  FTr   )scipy.linalg._decompr,  rH   rC   tolistr   r   repr)r|   r,  r  LM2r1  r5  F1F2itemstatusarrr]   s               @r^   test_datacopiedzTestDatacopied.test_datacopied
  s    4QFQF#$AJHHJVVX	 		8 	8 WWZ!UaY %[2u+E{D 	-LD&$-CS$/!%d-	-r`   N)r   r   r   r@  r   r`   r^   r*  r*  
  s    -r`   r*  c                      t        dt        j                        } t        j                  | j                  ddt
              }|j                  d      }t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float32)i  r   rR   r  offsetcountr\   rO  rO  Toverwrite_aN)	r:   rT   uint8
frombufferdatar;   r  r
   rX   r}   r  s     r^   test_aligned_mem_floatrL  
  sT     	s"((#A 	affQcAA			(Atr`   ppc64lezcrashes on ppc64lec                      t        dt        j                        } t        j                  | j                  ddt
              }|j                  d      }t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float64)i$  r   r<  r  rB  rE  TrF  N)	r:   rT   rH  rI  rJ  r   r  r
   rX   rK  s     r^   test_aligned_memrO  
  sT    
 	s"((#A 	affQc?A			(Atr`   c                      t        dt        j                        } t        j                  | j                  ddt
              }|j                  d      }t        |d       t        |j                  d       y	)
z>Check that complex objects don't need to be completely alignediH  r   rw  r  rB  rE  TrF  N)	r9   rT   rH  rI  rJ  r   r  r
   rX   rK  s     r^   test_aligned_mem_complexrQ  
  sT     	d"((#A 	affQcAA			(Atr`   c                    t        |      }t        t        |            D ]  }|d d  }t        ||   t        j
                        s't	        j                  ||   j                  ||   j                  j                  z  dz   t        j                        }t	        j                  |j                  d||   j                  ||   j                        }|j                  ||   j                        }||   |d<   |||<    | |i | t        ||   j                        dkD  s||   j                  ||<    | |i |  y )Nrw  r   r<  rB  .rb   )r+  r   rf   rd   rT   rE   r9   r   r\   itemsizerH  rI  rJ  r  r@   rX   )funcrh  rA  r   r}   r  s         r^   check_lapack_misalignedrU  
  s   :D3t9 #GadBJJ'!A$))AaDJJ$7$779JBrwwq!		%&qTZZ1BAaDJJ'BdBsGAaD!v1Q4::"tvv!a"6"#r`   z0Ticket #1152, triggers a segfault in rare cases.)runr9  c                     t        j                  dt              } t        j                  d      j	                  d      }t        j                  dt         j
                        }t        j                  |j                  ddt              }|j	                  d      }t        j                  d      }t        |      \  }}t        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        ||f|ft        d
      ft        ||ft        dd      ft         | ft        d	      ft         |ft        d	      ft         |ft        d	      ft"        |ft               ft"        |ft        d	      ft$        | ft        d	      ft&        |ft        d	      ft(        |ft        d	      ft*        |ft        d	      ft,        |ft        d	      ffD ]  \  }}}t/        |||        y )NrO  r   r  rE  i N  r<  rB  TrF  )overwrite_b)rG  rX  )rT   rF   r   r:   r  rH  rI  rJ  r   r   r
   r>  r   r   r   r   r   r   r   r   r   r   r   rU  )	r  Rr%  r   LUpivrT  rh  rA  s	            r^   test_lapack_misalignedr\    s    	rA
		#x(A
		%rxx(A
affQc?A			(A
AlGB1$./qdDT23!t-.dt45S	1~t'=>QFDTtDE1$./1$./1$./qdDF#qdDT23tTd34!t-.!t-.!t56QD$401!! 4tV$ 	 dF3%4r`   c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestOverwritec                 J    t        t        dg       t        t        ddg       y Nr  )rG   r
   rL  s    r^   test_eigzTestOverwrite.test_eig&  s    C&*C&&!12r`   c                 J    t        t        dg       t        t        ddg       y r`  )rG   r   rL  s    r^   	test_eighzTestOverwrite.test_eigh*  s    D6(+D66"23r`   c                 &    t        t        dg       y Nr;  )rG   r   rL  s    r^   r  zTestOverwrite.test_eig_banded.      J1r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_eigvalszTestOverwrite.test_eigvals1      GfX.r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_eigvalshzTestOverwrite.test_eigvalsh4  s    Hvh/r`   c                 &    t        t        dg       y re  )rG   r   rL  s    r^   r  z!TestOverwrite.test_eigvals_banded7  s    NVH5r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_hessenbergzTestOverwrite.test_hessenberg:  rf  r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_lu_factorzTestOverwrite.test_lu_factor=  s    Ix0r`   c                 x    t        j                  g dg dg dg      }t        |      t        fddg       y )Nrs   r!  )r  rw  rw  c                     t        |       S rJ  )r   )r   xlus    r^   r\  z-TestOverwrite.test_lu_solve.<locals>.<lambda>C  s    hsA&6 r`   )rt   )rT   r4   r   rG   )r|   r  rs  s     @r^   test_lu_solvezTestOverwrite.test_lu_solve@  s.    HHiI67l6?r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_luzTestOverwrite.test_luE      B)r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_qrzTestOverwrite.test_qrH  rw  r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_rqzTestOverwrite.test_rqK  rw  r`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   
test_schurzTestOverwrite.test_schurN  s    EF8,r`   c                 `    t        d dgt        j                  t        j                  g       y )Nc                     t        | d      S )Nr   )r   r}   s    r^   r\  z2TestOverwrite.test_schur_complex.<locals>.<lambda>R  s    eAy&9 r`   r  )dtypes)rG   rT   r;   r%  rL  s    r^   test_schur_complexz TestOverwrite.test_schur_complexQ  s!    9F8$&JJ

#;	=r`   c                 B    t        t        dg       t        d dg       y )Nr  c                     t        | d      S )NrR  r  )r   r  s    r^   r\  z(TestOverwrite.test_svd.<locals>.<lambda>W  s    c!7&C r`   )rG   r   rL  s    r^   test_svdzTestOverwrite.test_svdU  s    C&*CfXNr`   c                 &    t        t        dg       y r`  )rG   r   rL  s    r^   test_svdvalszTestOverwrite.test_svdvalsY  ri  r`   N)r   r   r   ra  rc  r  rh  rk  r  rn  rp  rt  rv  ry  r{  r}  r  r  r  r   r`   r^   r^  r^  %  sT    342/0621@
***-=O/r`   r^  c                 X   t        j                  | dft              j                  |      }t        j                  |      j
                  }d|z  }t        |      }t        |j                  | df       t        ||j                         |d       t        |j                        }t        |j                  d       t        ||j                         |       | d	kD  r|st         j                  j                  d      }|j                  | d	      |j                  d	|       z  }|d
|j                  | d      z  |j                  d|       z  z   }|j                  |      }t        |d      }t        |j                  | d	f       t        |d      }t        |j                  | df       y y y )NrR   r   r  rb   gz]ʂ>r  rR   rb   r,  rv   -C6?MbP?rcondư>rw   )rT   r   r   rY   r  r  r   r   r@   r   meanrX   rU   r  rV   )rZ   r\   skip_bigXr  r   Yrj   s           r^   _check_orthr  ]  sL   
Ae$++E2A
((5/

C
*CQA1a&!Aqvvxc7QSS	A&!Aqvvxc*1uXii##A&HHQNSXXa^+sxx1~%A66HHUO$QWWq!f%$QWWq%j) ur`   rw  z"test only on 64-bit, else too slowc                  |    d} 	 t        | t        j                  d       y # t        $ r}t	        d      |d }~ww xY w)Ni T)r  z.memory error perhaps caused by orth regression)r  rT   r%  MemoryErrorAssertionError)rZ   r  s     r^   test_orth_memory_efficiencyr  x  sA     	AArzzD1 <
	s   ! 	;6;c                      t         j                  t         j                  t         j                  t         j                  g} g d}t        j                  | |      D ]  \  }}t        ||        y )Nrb   rR   rt   rO  r  )rT   r;   r%  r<   rF  	itertoolsproductr  )r  r0  r   rZ   s       r^   	test_orthr    sO    jj"**bllBMMBFE""651 AArr`   r   c                     t        j                  d|       }t        j                  d|       }t        |      }|j                  t        |      j                  k(  sJ |j
                  dk(  sJ y Nr   r   rR   )rT   r   rF   r   r\   r@   )r   r}   rK  oas       r^   test_orth_emptyr    sW    
r"A		B	aB88tBx~~%%%88vr`   c                   T   e Zd Zd Zej
                  j                  deee	j                  ee	j                  g      d        Zej
                  j                  dddg      ej
                  j                  dddg      ej
                  j                  dd	d
g      d                      Zy)TestNullSpacec                    t         j                  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|       |j#                  d|dz  z   |      }t        |      }	t        |	j                  ||dz
  |dz  z
  f       t        ||	z  d|       |d	kD  st         j                  j                  d      }|j%                  |d	      |j%                  d	|      z  }|d
|j%                  |d      z  |j%                  d|      z  z   }|j'                  |      }t        |d      }	t        |	j                  ||d	z
  f       t        |d      }	t        |	j                  ||dz
  f        y )Nrb   r  rR   r   r  r   r,  r  rv   r  r  r  r  rw   )rT   rU   r  r;   r%  r<   rF  r  r  r   r  r  r%   r   r@   r   rX   randnrV   rY   )
r|   rj   r  r0  r   rZ   r  r  r   r  s
             r^   test_null_spacezTestNullSpace.test_null_space  s   ii##A&**bjj",,F"&&vu5 	2EBAb)A((2,""C*C1A1ac(+AE13/133A&)ACC!GQS1		!ad(A&A1A1a!eadl"34AE13/1uii++A.HHQNSXXa^3sxx1~-A>>HHRLq-QWWq!a%j1q-QWWq!a%j1;	2r`   r   c                     t        j                  d|      }t        j                  d|      }t        |      }|j                  dk(  sJ |j
                  t        |      j
                  k(  sJ y r  )rT   r   rF   r%   r@   r\   )r|   r   r}   rK  nsas        r^   test_null_space_emptyz#TestNullSpace.test_null_space_empty  sY    HHV2&VVAR myyF"""yyJrN00000r`   rG  TFr   r  r  rR  c                 (   t         j                  j                  d      }d}|j                  d|dz  z   |f      }t	        |j                         |||      }t        ||z  dt        j                  |j                        j                  dz         y )	Nl   'YeN rO  rb   rR   )rG  r   r  r   r  r,  )
rT   rU   r=  standard_normalr%   r   r   r  r\   r  )r|   rG  r   r  rj   rZ   r  r  s           r^   test_null_space_optionsz%TestNullSpace.test_null_space_options  s{     ii##$;<QT1.qvvx[|%24Aqrxx'8'<'<S'@Ar`   N)r   r   r   r  r   r   r   re   r   rT   r;   r   r<   r  r  r   r`   r^   r  r    s    #2J [[TC

GR\\#RS1 T1 [[]T5M:[[^dE];[[_w.@AB B < ;Br`   r  c            	      B   t        dt              } | d d d df   }| d d dd f   }t        t        ||      t        j
                  dz  gdz  d       t        t        ||      t        j
                  dz  gdz  d       ||fD ]:  }t        t        ||      t	        j                  |j                  d         d       < t	        j                  g dg dg d	g d
g      }d}t        t        |d d d df   |d d dd f         d   |d       t        t        |d d dd f   |d d d df         d   |d       d}t        t        |d d d df   |d d dgf         |d       t        t        |d d dgf   |d d d df         |d       d}t        t        |d d d df   |d d dgf         |d       t        t        |d d dgf   |d d d df         |d       d}t        t        |d d d df   |d d dd f         |dgd       t        t        t        |d   |       t        t        t        ||d          t        t        t        |d d |       t	        j                  g dg dg dg dg dg      }t	        j                  g dg dg dg dg dg      }t	        j                  t        j
                  dz  ddg      }t        t        ||      |d       dgdgg}ddgddgg}t        t        ||      dd       t        t        ||      dd       t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             t	        j                  d      }t	        j                  d      }t        t        ||      t	        j                  d             y ) Nrw  rt   r&  r+  r,  rb   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rR   r   rf  rg  gL0?gĹ-?gyv?r   rq  )r   rb   r   )r   r   rb   r   rT  r  ru  r   r   r   r   r_  )r"   r   r   r!   rT   pir9   r@   r4   r  r  r   )Hr]   r   r  r  r}   r   s          r^   test_subspace_anglesr    s   EA	!RaR%A	!QR%AOAq)BEEBJ<!+;%HOAq)BEEBJ<!+;%HV $1-rxx
/C"	$$
 		U	W	X	V	X	YA
 !HOAa!eHa12h7:H OAaeHa2A2h7:H  HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHa12h7(A  *oqtQ7*oq!A$7*oq"vq9 	)	 	A
 	)	 	A
 xxq!Q(HOAq)8%@
 A3A
!q!fAOAq)2E:OAq)2E: 	A
AOAq)288D>:
A
AOAq)288D>:
A
AOAq)288D>:r`   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)TestCDF2RDFc                 0    t        j                  d||      S )Nz...ij,...jk->...ik)rT   einsum)r|   r}   r   s      r^   matmulzTestCDF2RDF.matmul  s    yy-q!44r`   c                 \    t        | j                  ||      | j                  ||             y rJ  )r   r  )r|   r~   rm   r  s       r^   assert_eig_validzTestCDF2RDF.assert_eig_valid  s&    !KK1KK1	
r`   c                     t        j                  d      }t        j                  d      t        j                  d      }}t        ||      \  }}| j                  |||       y )Nr   r   )rT   r   r&   r  r|   r  r~   rm   wrr   s         r^   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0real$  sK    HHVxx{BHHV,1ABb"a(r`   c                     t        j                  ddgddgg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nrb   rR   rt   r   rT   r4   r7   r
   r&   r  r  s         r^   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_real+  sT    HHq!fq"g&'yy}}Q1ABb"a(r`   c                     t        j                  ddgddgg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nrb   rR   r   r  r  s         r^   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complex1  sT    HHq!fr1g&'yy}}Q1ABb"a(r`   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nrs   ru   r  r  s         r^   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_real7  sN    HHiI67yy}}Q1ABb"a(r`   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y Nrs   )r   r<  rv   )r   r  r<  r  r  s         r^   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex=  sN    HHiJ78yy}}Q1ABb"a(r`   c                    t         j                  j                  d      }t        dd      D ]Z  }|j                  d||f      }t         j                  j                  |      \  }}t        ||      \  }}| j                  |||       \ y )Nr  rb   r  r  rT   rU   r=  r   r7   r
   r&   r  r|   rj   r  r  r~   rm   r  r   s           r^   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arraysC  sv    ii##D)q! 	-A

CA;'A99==#DAqQ]FB!!"b!,		-r`   c                    t         j                  j                  d      }t        dd      D ][  }|j                  dd||f      }t         j                  j                  |      \  }}t        ||      \  }}| j                  |||       ] y )Nr  rb   r  rO  r  r  s           r^   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arraysL  sx    ii##D)q! 	-A

BAq>*A99==#DAqQ]FB!!"b!,		-r`   c                     t        j                  d      t        j                  d      }}t        t        t
        ||       y )Nr   )rR   )rT   r   r4   r  r  r&   r|   r~   rm   s      r^   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_errorU  s)    xx|RXXd^1j'1a0r`   c                     t        j                  d      t        j                  d      j                  dd      }}t        t        t
        ||       y )Nrt   rw   rR   rT   r:   r  r  r  r&   r  s      r^   r  z!TestCDF2RDF.test_not_square_errorY  s6    yy|RYYq\11!Q71j'1a0r`   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        t
        t        ||       y r  rT   r4   r7   r
   r  r  r&   r|   r  r~   rm   s       r^   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error^  s;    HHiJ78yy}}Q1j'1a0r`   c                     t        j                  d      t        j                  d      j                  dd      }}t        t        t
        ||       y )Nrt   r   r<  r  r  s      r^   test_non_associated_errorz%TestCDF2RDF.test_non_associated_errord  s6    yy|RYYr]221a81j'1a0r`   c                 r   t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        t
        t        ||       t        j                  g dg dg dgg dg dg dgg      }t         j                  j                  |      \  }}t	        t
        t        ||       y )Nrs   r   )rR   rv   y      @      r  r  s       r^   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairsi  s    HHiL9:yy}}Q1j'1a0 HH	<0	<0
  yy}}Q1j'1a0r`   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r`   r^   r  r    sH    5
)))))--11
11
1r`   r  )F)r  platformsysr.  numpyrT   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.conftestrK   scipy.__config__rL   machineIS_WASMr   r_   r%  REAL_DTYPESrF  rS   r  ro   rq   r   rH  r  r  r  rQ  r   rN  xfail_on_32bitparallel_threads_limitr(  rU  r[  r]  ro  rs  r.  rH  r~  blas_providerblas_versionr  r  r  r*  rL  rO  rQ  rU  xfailr\  r^  r  rO  r\   intprS  r  r  r   re   r   r  r  r  r  r   r`   r^   <module>r     s     
  5 5  *N N N N N N N NA A A $ 4 #; ; ; ; ; ; 8 ( 3 ' . #<<<'U+;8+;+;+=AU+U (-E   zz2::&,,.	~	%
4'= '=To4 o4d	f$ f$P	~! ~!BH$ H$TM# M#^M  G$;<AB##A&r  ' C =#; ;|E EE
. E
.PN- N-b}4 }4@Y# Y#x  $ #+,V4V<*+F3I>p' p'fG5 G5T> ><- -6
 $H$$&)3/  1
1
#$ uL  N4N4>5/ 5/p*6 HBHHRWW%..2?  AA  UBJJNO P8B 8BvB;J\1 \1r`   