
    e!h                       d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d d	lm>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d d
lQmRZR d dlSmTZT d dlUmVZV d dlWmXZX 	 d dlYmZZZ ej                  dk(  xs  ej                         dv Z]de^fdZ_ej                  ej                  gZaej                  ej                  gZceaecz   Zdd Ze G d d      Zf G d d      Zg G d d      Zh G d d      Zi G d d      Zj G d d      Zk G d  d!ek      Zlej                  j                  e]d"#      ej                  j                  d$      d%               Zp G d& d'      Zq G d( d)      Zr G d* d+      Zs G d, d-      Zt G d. d/      Zu G d0 d1      ZvdxZwZxeZeZd2   d3   d4   ZweZd2   d3   d5   Zx G d6 d7      Zy G d8 d9      Zz G d: d;      Z{ G d< d=      Z|d> Z}ej                  j                   ej                         d?k(  d@#      dA        Z~dB ZdC Zej                  j                  ddDE      dF        Z G dG dH      ZdUdIZej                  j
                  ej                  j                   ej                  ej                        j                  dJk  dK#      dL               ZdM Zej                  j                  dNee^ej                  eej                  g      dO        Z G dP dQ      ZdR Z G dS dT      Zy# e[$ r dZZY w xY w)V    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)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       f/var/www/html/diagnosisapp-backend/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'.
    rQ      r   zinput type not supported.      ?)
isinstanceintrT   rE   lenr@   	TypeErrorr3   rvsrW   rV   r5   )dim_or_eigvrngdimdvhs         r]   symrandrn   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ra   rQ      rQ         	   ]   rQ   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 )Nrr   rt   rk   rw   rx   rQ   r   )r4   rW   copyr   r>   r   rz   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 )Nrr   rQ   ru   y      @      ?y      "@      ?y      W@      @rQ   r   ry   rz   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 )	Nrr   rt   Fcheck_finiterw   rx   rQ   r   ry   rz   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   rQ   Thomogeneous_eigvalsrQ   r   )rS   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parametrizerd   floatr;   complexr<   r    r_   r]   rp   rp   \   sG    .... [[TC)#LM= N=r_   rp   c                       e Zd Zd Zd Zd Zd Z	 	 ddZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  j%                  deeej,                  eej0                  g      d        Zy)TestEigc                 b   t        g dg dg dg      }t        |      \  }}dt        d      z   dz  ddt        d      z
  dz  g}t        dddt        d      dz  z   dz  g      }t        g d	      }t        dddt        d      dz  z
  dz  g      }|t        |      z  }|t        |      z  }|t        |      z  }t	        ||       t	        ||d d df   t        |d
         z         t	        ||d d df   t        |d         z         t	        ||d d df   t        |d         z         t        d      D ]%  }t	        ||d d |f   z  ||   |d d |f   z         ' t        |dd      \  }}t        d      D ]/  }t	        |j                  |d d |f   z  ||   |d d |f   z         1 y )Nrr   rt   rw   rx   rQ   r   ra   rs         @r   r   r   ra   r   rQ   leftright)r4   r
   r>   r1   r   rB   rangerW   	r{   r|   r}   rl   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 )Nra   rQ   r         ?       @y      ?       )r4   r
   r   r   rV   rW   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 )Nrr   r   ra   r   rs   )r4   r
   r   r   rV   rW   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 )Nra   r   Tr   ra   r   r   )r
   r   r   r   rS   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   ra   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   y             rP   g|=)tolr   )rC   rS   rF   r@   r
   r   r   r   lexsortr   re   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   rS   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)ra   r   rs   )rQ   r   r   )r   rQ   r   )r   r   rQ   )ra   r   r   )r   ra   r   r   r   r   rs   rs   rs   r   r   )r5   r4   r9   rF   rS   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 )	NrQ   )ra   r   r   r   )r   ra   r   r   r   )r   r   ra   r   )r   r   r   ra   ra   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  )rS   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  rs   r   rP   )rS   rT   RandomStatern   r   )r{   ri   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 )Nrr   rt   Fr   rw   rx   rQ   r   ra   rs   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.rv   rs   rQ   N)rS   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.rQ         "@rs   N)rF   rS   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                  j	                         5 }|j                  t        d       t        j                  |dd      j                         sJ t        j                  |dd      j                         sJ 	 d d d        y # 1 sw Y   y xY w)N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r#  g      L@g      Z@g      o@float64r   )       @      @      $@r"  )r   r        &@g      =@)r        @g      *@g      ?@)r  r(  g      1@g     A@z%invalid value encountered in multiplyr&  +=r          @)	rS   r4   r
   testingsuppress_warningsfilterRuntimeWarningiscloseany)r{   r\   r   r  Vsups         r]   test_gh_11577zTestEig.test_gh_11577f  s     HH///02 :CD HH,,,-/ 7@A
 1ay1 ZZ))+ 	8sJJ~'NO::a5155777::a5155777		8 	8 	8s   4A'C%%C.r   c                 R   t        j                  d|      }t        |      \  }}t        t        j                  d|            \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ t        |t        j                  d             |j                  dk(  sJ |j
                  |j
                  k(  sJ t        |d      \  }}|j                  dk(  sJ |j
                  |j
                  k(  sJ |j                  dk(  sJ |j
                  |j
                  k(  sJ y )Nr   r   rQ   r   Tr   r   )rS   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_   N)vIh%<=r9  r9  r9  )r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r5  r   r   r   rd   r   rS   r;   r   r<   r   r   r_   r]   r   r      s    C(<<
 AF49H;TD"&*."A"*
-88 [[TC

GR\\#RS& T&r_   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  j%                  deeej,                  eej0                  g      d        Zy)TestEigBandedc                 $    | j                          y N)create_bandmat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`.
   rQ         ?ra         r          r   rP         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]   r>  zTestEigBanded.create_bandmat  s%     T!S\*tAaC346:4!T?A6NOtAaC346:4!T?A6NO
 d1dm,d4!S>2667d4!S>1556  QqS$45  QqS$3	4 d1cl+QqS$457;D1dOQ7OPQqS#346:4!T?A6NO
 Da..QqS$45d4!T?A667  QqS#34  QqS$3	4 DLL)BWWr{Dq$wKDMM*BWWr{T(4[
 ww{ $%8!4)7;t 	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.ra   	compute_vN)r,   rS  r8   r   rA   rO  r   rP  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.ra   r^  N)r-   rS  r8   r   rA   rO  r   rP  r`  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.        ra   rQ   r_  r   N)
r@   rJ  r.   rS  r8   r   rA   rO  r   rP  r{   rX  r}   ra  numifailrb  rc  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.ra   r^  N)r/   rT  r8   r   rA   rQ  r   rR  r`  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.rh  ra   rQ   ri  N)
r@   rK  r0   rT  r8   r   rA   rQ  r   rR  rj  s           r]   test_zhbevxzTestEigBanded.test_zhbevx  s~     T]]#1$*4+<+<c3156a%A!4eTQ
]#!$q'4??;!#e*c$2D2D.EFr_   c                 >   t        | j                        }|j                  }t        t	        |      | j
                         t        | j                        }|j                  }t        t	        |      | j                         d}t        j                  d      }t        | j                  d||f      }t        t	        |      | j
                  ||dz           t        | j                  d||f      }t        t	        |      | j                  ||dz           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  d||f      }	t        t	        |	      | j
                  ||dz           | j                  |   dz
  }| j                  |   dz   }t        | j                  d||f      }
t        t	        |
      | j                  ||dz           t        | j                  d	      }|j                  }t        t	        |      | j
                         y
)z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rQ   rv   r   selectselect_rangera   h㈵>rl   Fr   N)
r   rS  rN  r   rA   rO  rT  rQ  rS   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. NrQ   rv   r   rs  ra   rv  rl   Fr   )r   rS  r8   rN  r   rA   rO  r   rP  rT  rQ  rR  )r{   rx  evec_sym	evec_sym_ry  	evec_herm
evec_herm_rz  r{  r|  evec_sym_indr}  evec_herm_indr~  r  r  evec_sym_valr  evec_herm_vals                      r]   test_eig_bandedzTestEigBanded.test_eig_bandedF  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.rQ   Nra   r   	permute_l)
r@   rL  r(   rU  rH  rI  r5   r   r   r   r{   r  rX  lu_symm_bandipivrb  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.rQ   Nra   r   r  )
r@   rM  r*   rV  rH  rI  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(   rU  rH  rI  r)   r   r7   r   rL  r   r{   r  r  rb  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*   rV  rH  rI  r+   rW  r7   r   rM  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   ra   r   Teigvals_only)rS   r   r   r4   r@   r[   )r{   r   a_bandr}   rl   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   r@  r>  rd  rf  rm  ro  rq  r  r  r  r  r  r  r   r   r   rd   r   rS   r;   r   r<   r   r   r_   r]   r;  r;    s    M$bFF	FG	G(?T8Jt,,,, [[TC

GR\\#RS$ T$r_   r;  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestEigTridiagonalc                 $    | j                          y r=  )create_trimatr?  s    r]   r@  zTestEigTridiagonal.setup_method  s    r_   c                    d}t        |d      | _        t        |dz
  d      | _        t        | j                        t        | j                  d      z   t        | j                  d      z   | _        t        j                  | j                        \  }}|j                  }t        |      }||   | _	        |dd|f   | _
        y)z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.rB  rC  ra   rD  r   N)r6   rk   er5   full_matr7   r
   rN  r8   r}   ra  )r{   rX  rY  rZ  r[  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   rP   rC  lapack_driverfoor   r   r   rs  )r  r  r#   rk   r  rf   r?  s    r]   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6sLi!5tvvtvv{Ki!5tvvtvv$&	(j"6$)	+ 	j"6 w	8r_   c           
      B   dD ]C  }t        | j                  | j                  |      }t        t	        |      | j
                         E dD ]0  }t        t        t         | j                  | j                  |dd       2 dD ]  }t        | j                  | j                  ddt        | j                        d	z
  f|
      }t        t	        |      | j
                         d}d}t        | j                  | j                  d||f|
      }t        t	        |      | j
                  ||d	z           | j
                  |   dz
  }| j
                  |   dz   }t        | j                  | j                  d||f|
      }t        t	        |      | j
                  ||d	z            y)z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r   r   r  rt  ru  r  r  r  r   ra   rt  ru  r  rQ   rv   rv  rl   N)	r#   rk   r  r   rA   r}   r  r  re   )	r{   driverr}   w_indrz  r{  r~  r  w_vals	            r]   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  sy    B 	7F$TVVTVV6JA%d1gtvv6	7 ( 	/F*&:DFFDFF(.s'-/	/ 1 	HF(s!S[]9K$&E &d5k466: DD(s$$&E &d5k466$tAv3FG ffTlV+GffTlV+G(s'79K$&E &d5k466$tAv3FG+	Hr_   c                 @   t        t        t        | j                  | j                  d       dD ]  }t        | j                  | j                  |      \  }}|ddt        |      f   }t        t        |      | j                         t        t        |      t        | j                                t        t        t        | j                  | j                  ddd       d	D ]  }d
}t        | j                        dz
  }t        | j                  | j                  d||f|      \  }}t        t        |      | j                         t        t        |      t        | j                               d}d}t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                | j                  |   dz
  }| j                  |   dz   }t        | j                  | j                  d||f|      \  }}t        t        |      | j                  ||dz           t        t        |      t        | j                  dd||dz   f                 y)zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   ra   r  rQ   rv   rv  rl   )r  r  r$   rk   r  r8   r   rA   r}   r   ra  re   )	r{   r  r}   ra  rc  rz  r{  r~  r  s	            r]   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s2    	j"2DFFDFF$+	-8 	BF&tvvtvvVLGAtGAJ'E%d1gtvv6%c%j#dii.A		B 	j"2DFFDFF$*3V	M0 	FFDtvv;q=D&s$$&GAt &d1gtvv6%c$iTYY@DD&s$$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF ffTlV+GffTlV+G&s'79K$&GAt &d1gtvvd46/BC%c$i&)$))AtDF{N*C&DF3	Fr_   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-20075rE  Tr  ra   r   r   rs  rQ   rC  rl   )r   r   r   r   r   N)rS   r4   r$   ndimr   r   r@   )r{   r|   r   xr3  s        r]   test_eigh_tridiagonal_1x1z,TestEigTridiagonal.test_eigh_tridiagonal_1x1/  s    HHdVHHRLQ5vv{{11SvF1vv{{vv{{152$=)1SwG1vv{{ww$ww&   r_   N)	r   r   r   r@  r  r  r  r  r  r   r_   r]   r  r    s$     8 HD(FT!r_   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  de      e	j                  j                  dd	      d
               Ze	j                  j                  dd	      d        Ze	j                  j                  dd      e	j                  j                  dd      d               Zd Ze	j                  j                  deeej(                  eej,                  g      d        Zy)TestEighc                 B    t         j                  j                  d       y )Nr  )rS   rT   seedr?  s    r]   setup_classzTestEigh.setup_classC  s    
		tr_   c           	         t        t        t        t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg             t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      ddgddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      d	dg       t        t        t        t        j                  ddg      t        j                  ddg      ddg       t        t        t        t        j                  ddg      t        j                  ddg      ddg
       t        t        t        t        j                  ddg      d       t        t        t        t        j                  ddg      d d       t        t        t        t        j                  ddg      t        j                  ddg      d       t        t        t        t        j                  ddg      t        j                  ddg      dddg       t        t        t        t        j                  ddg      t        j                  ddg      dddg       y )Nra   rQ   rs      )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r  r  r   rS   r   r?  s    r]   test_wrong_inputszTestEigh.test_wrong_inputsF  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 )Nrs   )r  r'   r   rS   r   r?  s    r]   test_nonpositive_bzTestEigh.test_nonpositive_bl  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   rQ   r  ra   T)rZ   r[   )	enumerateDTYPESr^   r   r   r@   re   r   )r{   indr   r|   r}   rl   r   s          r]   test_value_subsetszTestEigh.test_value_subsetsp  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 )Nra   rQ      rs   ru   )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   rQ   )	scipy.sparsesparseidentitytocscrS   
atleast_2dr  r  r   )r{   scipyr|   r   s       r]   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse  sH    LL!!!$**,MM!j$*j$*r_   dtype_r  )rZ  evdr  evxc                     t        d|      }t        ||      \  }}t        ||z  ||z  z
  ddt        j                  |      j
                  z  d       y )Nr  )rY   r[   r  rh    r   r   )r^   r   r   rS   finfoeps)r{   r  r  r|   r}   rl   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 )Nra   r  rC  V瞯<r+  rP   r   )r   r   r4   )r{   r  r}   rl   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  rr   )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)rZ   )r|   r   r  r  ra   rh  r  rQ   )rS   spacingr^   r   r   )r{   r  r  r   r|   r   r}   rl   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 )
Nru   ra   rQ   r  )ra   333333??      ?rQ   gffffff?r  r  r  )r^   r   r   re   r   rS   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   rQ   r   Tr  )rS   r   r   rF   r@   r[   r   )r{   r   r|   r}   rl   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  r  r  r   r   r   r  r  r  r  r  rd   r   rS   r;   r   r<   r   r   r_   r]   r  r  B  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 )NrC  r  r  )r  rf   r   r  r?  s    r]   r  zTestSVD_GESDD.test_degenerate  s&    itfB?j#vUCr_   c                    g dg dg dg}dD ]  }t        ||| j                        \  }}}t        |j                  |z  t	        d             t        |j                  |z  t	        d             t        |j                  d   |j                  d   f|j                  j                        }t        t        |            D ]  }||   |||f<    t        ||z  |z  |        y )Nrr   ra   r  rs   rt   TFfull_matricesr  rs   r   r   r  r   rW   rF   r9   r@   r[   charr   re   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 )Nrr   rt   r  r  rs   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 )Nrr   r  ru   rv   r  r  r   r   r  r   rW   rF   r@   r9   r[   r  r   re   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 )	Nra   rQ   r  ru   rs   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   rs   r  r  ra   r   )rS   rT   r  r   r   r  r   rW   rF   r@   r9   r[   r  re   )r{   ri   rY   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 )Nrr   )ra   y               @rs   rt   r  r  ra   r   )r   r  r   rV   rW   rF   r@   r9   r[   r  r   re   r  s           r]   r   z!TestSVD_GESDD.test_simple_complex  s    
I.* 	9M1M)-););=HAq"%affhjj1nc!''!*oF%bggikkB&6BHHQK8HI1771:rxx{3QWW\\BE3q6] #dad#%a%i"na8	9r_   c           
         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   rs   r  rP   r  ra   r   )rS   rT   r  r   listr@   r   r  r   rV   rW   rF   r9   r[   r  re   )r{   ri   rY   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  )rS   rT   r  r;   r$  r<   
complex128rU   rX   r   r  )r{   ri   sizesszr   r|   s         r]   test_crash_1580zTestSVD_GESDD.test_crash_15804  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 )Nrr   r
  rt   F)r   r  rs   r   r  )r{   r|   r  r  r  r  r   s          r]   r  zTestSVD_GESDD.test_check_finite=  s    
I.quD<N<NO1b!!##'3q62!"$$)SV4qwwqz288A;/>s1v 	AA$E!Q$K	!!e)b.!4r_   c                 t    t        j                  g dg dg dg dg      }t        || j                         y )N)K}\UU?vWUU?r,  rh  rh  rh  )rh  r,  r-  r,  rh  rh  )rh  rh  r,  r-  r,  rh  )rh  rh  rh  r,  r-  r,  r  )rS   r4   r   r  )r{   r   s     r]   test_gh_5039zTestSVD_GESDD.test_gh_5039G  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_mbra   l        r   r  Fr  r   rC  r   )rI   rS   r9   r;   r   r   )r{   r\   r  r  r  s        r]   test_large_matrixzTestSVD_GESDD.test_large_matrixX  sd     	%(HHaZrzz2%q.1b!c"$"U)+S1r_   r  r   ra   rQ   rY   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   FDFr3  
compute_uv)	rS   r9   minr[   r  lowerr   r   r@   )r{   r  rY   r[   r|   r  dchar
real_dcharr  r  rl   s              r]   test_shape_dtypezTestSVD_GESDD.test_shape_dtypeb  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  rY   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 )Nrs   r   r   Fr3  r   r8  )rS   rF   r   r   r   r  r[   )r{   r   r  rY   a0u0s0r   r|   r  r  rl   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"  r)  r  r.  r   r   skipifrJ   slowr4  r   r  r>  rd   r   rS   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]   rH  rH    s    Mr_   rH  zout of memory in WASMr/  rB  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   )rS   r   r$  r  r  r   )dfs    r]   test_svd_gesdd_nofegfaultrL    s<    
 
ww}BJJ/B	z	" B  s   A

Ac                       e Zd Zej                  j                  deeej                  e
ej                  g      d        Zd Zd Zd Zd Zd Zd Zd	 Zej                  j(                  d
        Zy)TestSVDValsr   c                 ^   g gt        j                  d      t        j                  d      fD ]~  }t        j                  ||      }t	        |      }t        |t        j                  d             t	        t        j                  d|            }|j                  |j                  k(  r~J  y )Nr   r   rs   r   r   rQ   )rS   r   r   r4   r   r   rF   r[   )r{   r   r|   r  rD  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 )Nrr   rt   rs   r   ra   rQ   r   r   re   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 )Nrr   r  rQ   r   ra   rR  rS  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 )Nra   rQ   r  ru   rs   r   rR  rS  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 )Nrr   )ra   r                @rt   rs   r   ra   rQ   rR  rS  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 )Nrr   )r  y              @rv   rQ   r   ra   rR  rS  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 )Nra   rQ   r  ru   rW  r   rR  rS  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 )	Nrr   rt   Fr   rs   r   ra   rQ   rR  rS  s      r]   r  zTestSVDVals.test_check_finite  sN    	9-AE*A!!!$!$%$%r_   c                     t         j                  j                  d       t         j                  j                  dd      }t	        |       y )Nr  i  i
  )rS   rT   r  rU   r   r{   r|   s     r]   test_crash_2609zTestSVDVals.test_crash_2609  s-    
		tIINN4&
r_   N)r   r   r   r   r   r   rd   r   rS   r;   r   r<   r   r   r  r  r   rY  r[  r  rF  r_  r   r_   r]   rN  rN    sz    [[TC

GR\\#RS' T'&&& [[ r_   rN  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ra   r   r   rs   r   )r   r   r?  s    r]   r   zTestDiagSVD.test_simple  s     !')Q":#,i"C	Er_   N)r   r   r   r   r   r_   r]   ra  ra    s    Er_   ra  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z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   rQ   rs   rQ   rw   rs   ru   rs   rv   rs   r   r   rW   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 )Nrh  rj  rk  rr   r   rs   r   r   r   rF   r{   r|   rn  ro  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 )Nrh  rj  rk  rr   rs   rq  rr  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 )	Nrh  rj  rk  Tpivotingra   r   rs   
rS   rC   r   r   r5   r   r   r   rW   rF   r{   r|   rn  ro  prk   q2ru  s           r]   test_simple_pivotingzTestQR.test_simple_pivoting  s    JJ	9i89Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r_   c                     g dg dg dg}t        |d      \  }}}g d}t        ||dd      \  }}}t        ||z  |       y )Nrh  rj  rk  Trz  rr   r   r   r   r   r{   r|   rn  ro  jpvtrs  rt  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 )Nrh  rj  rk  Trz  rr   r  r  s          r]   test_simple_right_pivotingz!TestQR.test_simple_right_pivoting  sG    	9-D)
1d!!Q6At!!a%,r_   c                     g dg dg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y )Nrh  rj  rQ   rl  rm  s       r]   test_simple_trapzTestQR.test_simple_trap&  =    	"!u1!!##'3q62!!a%+r_   c                    t        j                  g dg dg      }t        |d      \  }}}t        t	        |            }t        t        j                  |dd  |d d k               t        |j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )Nrh  rj  Trz  ra   r   rQ   r|  r}  s           r]   test_simple_trap_pivotingz TestQR.test_simple_trap_pivoting,  s    JJ	9-.Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r_   c                     ddgddgddgg}t        |      \  }}t        |j                  |z  t        d             t        ||z  |       y Nri  rQ   rw   ru   rs   rl  rm  s       r]   test_simple_tallzTestQR.test_simple_tall7  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 )
Nri  rQ   rw   ru   rs   Trz  ra   r   r|  r}  s           r]   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting>  s    JJAAA/0Q&1aQLqu#2'(!!##'3q62!!a%1a41AadGB!!R(!!R(r_   c                     ddgddgddgg}t        |d      \  }}t        |j                  |z  t        d             t        ||z  |       t	        |j
                  d       t	        |j
                  d	       y )
Nri  rQ   rw   ru   rs   economicmoders   rQ   rQ   rQ   r   r   rW   rF   r   r@   rm  s       r]   test_simple_tall_ezTestQR.test_simple_tall_eJ  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 )Nri  rQ   rw   ru   rs   Tr  r{  r  ra   r   r  r|  r}  s           r]   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivotingS  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 )Nri  rQ   rw   ru   rs   r  r  ra   r   ra   rQ   r   Toverwrite_cr   r   r   r4   rF   rr  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 )Nri  rQ   rw   ru   rs   r  Tr  r{  ra   r   )r   r   r   r   rF   )r{   r|   rn  ro  r  rs  rt  kpvts           r]   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivotingl  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 )	Nri  rQ   rw   ru   rs   r  r  rr   rq  r{   r|   rn  ro  rs  cqru  s          r]   test_simple_tall_rightzTestQR.test_simple_tall_rightv  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 )Nri  rQ   rw   ru   rs   Tr  r  rr   rz  rq  r{   r|   rn  ro  r  rs  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ri  rQ   ru   rj  rQ   r  rQ   rs   r  rm  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  rj  Trz  ra   r   rQ   r  r  rS   rC   r   r   r5   r   r   r   rW   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 )Nrh  rQ   rw   ru   r  r  rQ   r  r  r  rm  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 )Nrh  r  Tr  r  ra   r   rQ   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 )Nrh  r  r  r  ra   rQ   r   rq  rr  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 )	Nrh  r  r  Tr  ra   rQ   r   rq  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 )Nrh  r  r  r  ra   rQ   rq  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 )	Nrh  r  Tr  r  ra   rQ   rz  rq  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rs         @      @ru   ru   rQ   y       @      @rs   rQ   r  rs   )r   r   rV   rW   rF   rm  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  ra   rQ   r  r   rs   rq  r{   r|   rn  ro  rs  rt  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  rs   rq  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 )Nri  y       @      @rQ   rw   y      @      @rs   r  r  ra          @       @r   r  Tr  r  rr  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   rV   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 )Nrs   r  ru   r  rQ   r  r  ra   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   rS   r4   r   r   rV   r  s         r]   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate  sO    <3!u1HH\"AqD1A!!affh,3r_   c                    t        g dg dg dg      }t        |d      \  }}}t        t        |            }t	        t        j                  |dd  |d d k               t        |j                         j                  |z  t        d             t        ||z  |d d |f          t        |d d |f         \  }}t        ||       t        ||       y )	Nr  r  r  Trz  ra   r   rs   )r4   r   r   r5   r   rS   r   r   rV   rW   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  Trz  r  r   r4   r   r   r   r  s          r]   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivoting"  sN    <y9:D)
1d!!Q5At!!a%,r_   c                     t        g dg dg dg      }t        |d      \  }}}g d}t        ||d      \  }}}t        ||z  |       y )Nr  r  r  Trz  r  r  r  s          r]   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting)  sL    <y9:D)
1d!!Q6At!!a%,r_   c                 
   t         j                  j                  d      }d}t        d      D ]T  }|j                  ||g      }t	        |      \  }}t        |j                  |z  t        |             t        ||z  |       V y Nr  r  rQ   rS   rT   r  r   r   r   rW   rF   r{   ri   rY   r  r|   rn  ro  s          r]   r  zTestQR.test_random0  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  rQ   r   rS   rT   r  r   r   r   r   rF   	r{   ri   rY   r  r|   rn  ro  rs  rt  s	            r]   test_random_leftzTestQR.test_random_left9  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{   ri   rY   r  r|   rn  ro  rs  r  s	            r]   test_random_rightzTestQR.test_random_rightE  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  rQ   Trz  ra   r   rS   rT   r  r   r   r   r5   r   r   r   rW   rF   r{   ri   rY   r  r|   rn  ro  r~  rk   r  ru  s              r]   test_random_pivotingzTestQR.test_random_pivotingQ  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  rQ   r  r{   ri   r  rY   r  r|   rn  ro  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  rQ   r  r  r   r  )
r{   ri   r  rY   r  r|   rn  ro  rs  rt  s
             r]   test_random_tall_leftzTestQR.test_random_tall_leftj  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  rQ   r  r  r  )
r{   ri   r  rY   r  r|   rn  ro  rs  r  s
             r]   test_random_tall_rightzTestQR.test_random_tall_rightx  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  rQ   Trz  ra   r   r  r{   ri   r  rY   r  r|   rn  ro  r~  rk   r  ru  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  )
rS   rT   r  r   r   r   rW   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  rQ   Tr  r  ra   r   r  )rS   rT   r  r   r   r   r5   r   r   r   rW   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  rQ   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  rQ   Trz  ra   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  rQ   rP   )	rS   rT   r  r   r   r   rV   rW   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  rQ   rP   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  rQ   rP   Trz  ra   r   )rS   rT   r  r   r   r   r5   r   r   r   rV   rW   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 Nrh  rj  rk  Fr   rs   rl  rm  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 )Nrh  rj  rk  )lworkrs   rB  r   r  r   rQ   )r   r   r  	Exception)
r{   r|   rn  ro  r  ru  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  r5  rY   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   rz  ra   r   ro  r  r  raw)	r:  rS   r9   r   r   r@   r[   re   int32)r{   r  rY   r{  r[   r  r|   rn  ro  otherr~  r  taus                r]   r>  zTestQR.test_shape_dtype  s   
 1IHHaV5)!h/1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+qsX6	EQWWq!f%QWWe$5z8a333BA1$'"((+!*x@1uQWWq!f%QWWe$QWWq!f%QWWe$5z8a333BA1$'"((+ "158 D
cASYYA'SYY&SYY%SYY&QWWq!f%QWWe$5z8a333BA1$'"((+ r_   r?  r@  c                    t        ||      }t        j                  ||f      }t        |      \  }}t	        |t        j
                  |             t	        |t        j                  ||f             t        |d      \  }}}t	        |t        j
                  |             t	        |t        j                  ||f             t	        |t        j                  |             t        |d      \  }t	        |t        j                  ||f             t        |d      \  }}t	        |t        j                  ||f             t	        |t        j                  ||f             t        |d      \  \  }}	}t	        |t        j                  ||f             t	        |	t        j                  |f             t	        |t        j                  ||f             y )NTrz  ro  r  r  r  )r:  rS   r   r   r   r  r:   )
r{   r  rY   r  r|   rn  ro  r~  r  r  s
             r]   r   zTestQR.test_emptyO  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   )rS   r   r   r   )r{   r|   rs  r  ro  s        r]   test_multiply_emptyzTestQR.test_multiply_emptyi  s    HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-HHVHHVAq!ABHHV,-r_   N)>r   r   r   r   rv  rx  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]   re  re    s   ,))	)--,	),
)&
)))))&)&))))),)))444	)--0
-
--	0--- *-$0-0
-
--,90 [[S),[[S),[[Z%7[[Wf-., . 8 - -.,` [[Z)AB- C-2.r_   re  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 rg  r   r   rW   rF   r{   r|   ro  rn  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 )Nrh  rj  rk  ro  r  )r   r   )r{   r|   ro  rn  ru  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  rS   rT   r  r   r   r   rW   rF   r{   ri   rY   r  r|   ro  rn  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 )Nrh  rj  rs   r#  r$  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  r#  r$  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  rj  rs   r#  r$  s       r]   r  zTestRQ.test_simple_fat  s=    	"!u1!!acc'3q62!!a%+r_   c                     g dg dg dg}t        |      \  }}t        ||j                         j                  z  t	        d             t        ||z  |       y r  )r   r   rV   rW   rF   r$  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  r(  r{   ri   r  rY   r  r|   ro  rn  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  r(  r/  s           r]   r  zTestRQ.test_random_trap  r0  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  rQ   r  r  )
rS   rT   r  r   r   r   rW   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  )	rS   rT   r  r   r   r   rV   rW   rF   r)  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  rQ   rP   r  r  )rS   rT   r  r   r   r   rV   rW   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  r#  r$  s       r]   r  zTestRQ.test_check_finite  sB    	9-!%(1!!acc'3q62!!a%+r_   r  r5  rY   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   ro  r  r  )r:  rS   r9   r   r   r@   r[   )r{   r  rY   r[   r  r|   ro  rn  s           r]   r>  zTestRQ.test_shape_dtype  s     1IHHaV5)!u1QWWq!f%QWWq!f%QWWe$QWWe$qsOQWWq!f%QWWe$!*%1QWWq!f%QWWe$QWWq!f%QWWe$r_   r?  r@  c                    t        ||      }t        j                  ||f      }t        |      \  }}t	        |t        j                  ||f             t	        |t        j
                  |             t        |d      }t	        |t        j                  ||f             t        |d      \  }}t	        |t        j                  ||f             t	        |t        j                  ||f             y )Nro  r  r  )r:  rS   r   r   r   r  )r{   r  rY   r  r|   ro  rn  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   r&  r  r  r  r  r   r  r  r3  r"  r6  r  r   r   r   r  r>  r   r   r_   r]   r!  r!  z  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   rV   rW   rS   rF   re   )r{   r|   tr  r   r   s         r]   check_schurzTestSchur.check_schur  s]    A

*ADt H	J 	AFFHJJA7 2	4r_   c           	         g dg dg dg}t        |      \  }}| j                  |||dd       t        |d      \  }}t        t        j                  t        t        |                  xr' t        j                  t        t        |                         | j                  |||dd       t        ||      \  }}| j                  |||dd       y )Nri     rs   rj  rB  rs   rv   r*  +<r   r   r   )r   r>  r   rS   r2  r=   r?   r   )r{   r|   r=  r  tczctc2zc2s           r]   r   zTestSchur.test_simple  s    J/Qx1Aqu59q)$BuYr]+,Mim8L1MNBU;2r?SC5u=r_   zsort, expected_diaglhprQ         rb   rhpiucoucc                     | dk\  S )Nrh  r   )r  s    r]   <lambda>zTestSchur.<lambda>&  s
    AH r_   c                     g dg dg dg dg}t        ||      \  }}}| j                  |||dd       t        t        j                  |      |d	
       t        d|       y )Nr&  r   rC  rD  g      g      rD  rC  r        @      g      @rT  r&  rF        @rA   r*  rC  rD  -q=r   rQ   )r   r>  r   rS   r5   r   )r{   rA   expected_diagr|   r=  r  sdims          r]   	test_sortzTestSchur.test_sort   sb     "! 14(
1dAqu59
M>Qr_   c                 |    g dg dg dg dg}t        t        t        |d       t        t        t        |d       y )NrQ  rR  rS  rV  unsupportedrX  ra   )r  r  r   r^  s     r]   test_sort_errorszTestSchur.test_sort_errors4  s3    "! 	j%?j%3r_   c                     g dg dg dg}t        |d      \  }}t        ||z  |j                         j                  z  |       y )Nr@  rj  rB  Fr   )r   r   rV   rW   )r{   r|   r=  r  s       r]   r  zTestSchur.test_check_finite<  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   rQ   rI  rX  r   )rS   r   r   rF   r   r[   r   )r{   r   r|   r=  r  t0z0r\  s           r]   r   zTestSchur.test_emptyA  s    HHV2&Qx1rvvar*+B288F+,288F+,ww"(("""ww"(("""15)
1d288F+,288F+,T1ww"(("""ww"(("""r_   rA   outputrN  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   rQ   rA   re  r   rL  r   )rS   rC   r   rX   )r{   rA   re  r[   r\   r\  s         r]   test_gh_13137_sort_strz TestSchur.test_gh_13137_sort_strR  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 )
Nrg  r   rQ   rN  c                     r9t        j                  |       rJ |t        j                  |      sJ | |dz  z   }nt        j                  |       sJ |J | }|j                  dkD  S )NrP   r  )rS   iscomplexobjisrealr   )r  r  r  all_reals      r]   rA   z1TestSchur.test_gh_13137_sort_custom.<locals>.sorty  si    ??1---}155"Hq)))y y66E>!r_   rh  r   ra   r=  )rS   rC   r;   r$  r   rX   )r{   re  r[   r\   rA   r\  rn  s         @r]   test_gh_13137_sort_customz#TestSchur.test_gh_13137_sort_customh  s     JJb	As8,-6>Ge

BJJ/G&G		" QXXe_4?C$tqy33$!)33)yr_   N)r   r   r   r>  r   r   r   r   rS   r>   r]  r`  r  rd   r   r;   r   r<   r   r$  r&  ri  ro  r   r_   r]   r;  r;    s#   4> [[
72771:+tWRWWQZ5	6
'"''!*cGBGGAJ;5	6
$WRWWQZ'"''!*5	6
'"''!*wrwwqzk45	6
wrwwqz3TB	C		E

4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_   r;  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@ra   calc_qr  decimalr   r   rW   r{   r|   h1rm   rn  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 )Nrs  )ru  y             f@rw  )y             ;r
  ry  ra   r}  )r   r   rV   rW   r{   r|   rm   rn  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)ra   rQ   rs   r  ru   rv   r  )r   rQ   rs   r  rv   r  rQ   )r   rQ   rQ   rs   r   rs   rQ   )r   r   rQ   ri  r   r   rQ   )r   rs   ra   rQ   r   ra   rQ   )r   ra   rQ   rs   r   ra   r   )r   r   r   r   r   ra   rQ   ra   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 )Nrs   rQ   )r   r   ra   r}  )rS   rF   r   r   rW   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  rQ   ra   r}  )rS   rT   r  r   r   r   rW   r{   ri   rY   r  r|   rm   rn  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  rQ   rP   ra   r}  )rS   rT   r  r   r   r   rV   rW   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 )Nrs  rt  rx  rz  r{  r|  ra   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 )
NrQ   ra   r  rA  r}  y       @      r   y      @      @y      (@       )r   r   rS   rF   )r{   r|   rm   rn  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   rs   Tr}  )rS   r   r   r@   r[   rF   )r{   r   r|   rm   rn  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   rd   r   r;   r   r<   r   r   r_   r]   rq  rq    s[    	49	226=	4
) [[TC)#LM# N#r_   rq  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  ru   r  r   )rS   rT   r  rX   r;   r   r   rW   rF   r   r   r5   	r{   ri   rY   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  ru   r   
rS   rT   r  r   r   rW   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  ru   rP   r   )rS   rT   r  r   r   rV   rW   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  ru   rP   r  r   )rS   rT   r  rX   r<   r   r   rV   rW   rF   r   r   r5   r   r  s	            r]   test_qz_complex64zTestQZ.test_qz_complex64	  sG   ii##E*ZZA"SZZA%7"77??	JZZA"SZZA%7"77??	J!QxB1!!b&1668::"5q!D!!b&1668::"5q!D!!affhjj.#a&!D!!affhjj.#a&!DtBx1}%&tBx}})*+r_   c                    t         j                  j                  d      }d}|j                  ||g      }|j                  ||g      }t        ||d      \  }}}}||z  |j	                         j
                  z  }	t        |	j                  |       t        |	j                  d       ||z  |j	                         j
                  z  }
t        |
j                  |       t        |
j                  d       t        ||j	                         j
                  z  t        |             t        ||j	                         j
                  z  t        |             t        t        j                  t        |      dk\               y )Nr  ru   r   )re  r   )rS   rT   r  r   rV   rW   r   rN  r   rF   r   r   r5   )r{   ri   rY   r\   r   r  r  r  r  aabbs              r]   test_qz_double_complexzTestQZ.test_qz_double_complex 	  s   ii##E*JJ1vJJ1v!Qy1B1Vaffhjj !"''1-!"''1-Vaffhjj !"''1-!"''1-!!affhjj.#a&9!!affhjj.#a&9tBx1}%&r_   c                     t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        t        t        ||d	 
       y )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r        ErW  )皙@rT        GrT  )rC  rC  rF  rC  )rC  r   g      r  )rC  r%  rU  rC  )r  r   rU  r&  c                     |dk(  S )Nr   r   )araibetas      r]   rO  z,TestQZ.test_qz_double_sort.<locals>.<lambda>H	  s
    bAg r_   rX  )	rS   r4   r  r  r   r   r   rW   r   )r{   r\   r   r  r  r  r  r\  s           r]   test_qz_double_sortzTestQZ.test_qz_double_sort0	  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  ru   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              )rP   y333333@y              y      @      )r  r  r  rJ  r  )r  r  r  rW  )r  g      :@r  rT  )ra   rQ   ra   )ra   rs   r  )ra   rs   rs   )ra   rs   r  r  )r  rC  r   r   )r&  r&  r%  r)  )r)  r&  rC  r   )rh  r&  r,  r)  )r,  r'  rT  r'  )r)  r)  r%  r  )r  rC  rT  rT  )r  rC  r&  r)  rQ   r   ra   )rS   r4   rF   r5   r\   r   )
clsA1B1A2B2A3B3A4B4A5s
             r]   r  zTestOrdQZ.setup_class	  s(    XX $&%'( ) XXDDDDF G XX/...0 1
 XX}$$$& ' XX'''') * XX)''') * VVAYWWaV_ WWaV_RR$RR$r_   c           
      
   t        j                  d      5  t        | j                  | j                        D cg c]  \  }}t        |||       }}}d d d        t        |      S c c}}w # 1 sw Y   t              S xY w)Nraiser   rX  )rS   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   ra   rQ   T)rS   rF   r@   r   rW   rV   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 r=  )r  r  r\   r   r  )r{   rA   r  retir  r  s         r]   	check_allzTestOrdQZ.check_all
  sM    nnT"TVVTVV4 	,LD"bDJJr2t+d+	,r_   c                 &    | j                  d       y )NrI  r  r?  s    r]   test_lhpzTestOrdQZ.test_lhp
      ur_   c                 &    | j                  d       y )NrK  r  r?  s    r]   test_rhpzTestOrdQZ.test_rhp
  r  r_   c                 &    | j                  d       y )NrL  r  r?  s    r]   test_iuczTestOrdQZ.test_iuc
  r  r_   c                 &    | j                  d       y )NrM  r  r?  s    r]   test_ouczTestOrdQZ.test_ouc
  r  r_   c                 ,    d }| j                  |       y )Nc                     t        j                  | t              }|dk7  }d|| <   | |   ||   z  j                  dk(  ||<   |S Nr   r   FrS   
empty_likeboolr   r  r  outnonzeros       r]   rA   z TestOrdQZ.test_ref.<locals>.sort
  L    --.CAvG!CMgJqz1771<CLJr_   r  r{   rA   s     r]   test_refzTestOrdQZ.test_ref
      	 	tr_   c                 ,    d }| j                  |       y )Nc                     t        j                  | t              }|dk7  }d|| <   | |   ||   z  j                  dk7  ||<   |S r  r  r  s       r]   rA   z TestOrdQZ.test_cef.<locals>.sort*
  r  r_   r  r  s     r]   test_cefzTestOrdQZ.test_cef(
  r  r_   c                 `   t        | j                  d   | j                  d   d      } | j                  | j                  d   | j                  d   dg|  t        | j                  d   | j                  d   d      } | j                  | j                  d   | j                  d   dg|  y )Nra   rQ   rI  rX  )r    r\   r   r  )r{   r  s     r]   test_diff_input_typeszTestOrdQZ.test_diff_input_types3
  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 )NrQ   r   rb   rI  rJ  rK  rL  rM  y             ?y      ?      ?yٿɿ      ?      r   ra   rX  )	rS   rF   r5   r   nanr  r    r  r   )r{   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5r\   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azero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)TestOrdQZWorkspaceSizeru   c                 *   t         j                  j                  d      }d}t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X t         j                  t         j                  fD ]V  }|j                  ||f      j                  |      }|j                  ||f      j                  |      }t        ||d d      }X y )Nr     c                     | |k  S r=  r   r  r  s     r]   rO  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>t
  
    UT\ r_   rN  rh  c                     | |k  S r=  r   r  s     r]   rO  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>z
  r  r_   r   )	rS   rT   r  r;   r$  rX   r    r&  r<   )r{   ri   rX  ddtyper\   r   r  s          r]   test_decomposez%TestOrdQZWorkspaceSize.test_decomposek
  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  rM  rX  )	rS   rT   r  r;   r$  r&  r<   rX   r    )r{   ri   rX  r  r\   r   SrW   r  r  Ur3  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  rF  r  r   r_   r]   r  r  j
  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   )_datacopiedra   rQ   rs   c                       e Zd Zd fd	Zy)-TestDatacopied.test_datacopied.<locals>.Fake1Nc                     S r=  r   )r{   r[   r   r\   s      r]   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__
  s    r_   )NN)r   r   r   r#  r\   s   r]   Fake1r!  
  s    r_   r%  c                   (    e Zd ZW  j                  Zy)-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r$  s   r]   Fake2r'  
  s    "#"7"7r_   r)  FTr   )scipy.linalg._decompr  rH   rC   tolistr   r   repr)r{   r  r  LM2r%  r)  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   r4  r   r_   r]   r  r  
  s    -r_   r  c                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float32)i  r   rQ   r  offsetcountr[   rB  rB  Toverwrite_aN)	r:   rS   uint8
frombufferdatar;   r@   r
   rW   r|   r  s     r]   test_aligned_mem_floatr@  
  sM     	s"((#A 	affQcAAAGtr_   ppc64lezcrashes on ppc64lec                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z4Check linalg works with non-aligned memory (float64)i$  r   r  r  r6  r9  Tr:  N)	r:   rS   r<  r=  r>  r   r@   r
   rW   r?  s     r]   test_aligned_memrC  
  sM    
 	s"((#A 	affQc?AAGtr_   c                      t        dt        j                        } t        j                  | j                  ddt
              }d|_        t        |d       t        |j                  d       y	)
z>Check that complex objects don't need to be completely alignediH  r   ri  r  r6  r9  Tr:  N)	r9   rS   r<  r=  r>  r   r@   r
   rW   r?  s     r]   test_aligned_mem_complexrE  
  sM     	d"((#A 	affQcAAAGtr_   c                 l   t        |      }t        t        |            D ]  }|d d  }t        ||   t        j
                        s't	        j                  ||   j                  ||   j                  j                  z  dz   t        j                        }t	        j                  |j                  d||   j                  ||   j                        }||   j                  |_        ||   |d<   |||<    | |i | t        ||   j                        dkD  s||   j                  ||<    | |i |  y )Nri  r   r  r6  .ra   )r!  r   re   rc   rS   rE   r9   r   r[   itemsizer<  r=  r>  r@   rW   )funcr[  kwargsr   r|   r  s         r]   check_lapack_misalignedrJ  
  s   :D3t9 #GadBJJ'!A$))AaDJJ$7$779JBrwwq!		%&qTZZ1BtzzBHdBsGAaD!v1Q4::"tvv!a"6"#r_   z0Ticket #1152, triggers a segfault in rare cases.)runr0  c                     t        j                  dt              } t        j                  d      }d|_        t        j                  dt         j
                        }t        j                  |j                  ddt              }d|_        t        j                  d      }t        |      \  }}t        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        |ft        d	      ft        ||f|ft        d
      ft        ||ft        dd      ft         | ft        d	      ft         |ft        d	      ft         |ft        d	      ft"        |ft               ft"        |ft        d	      ft$        | ft        d	      ft&        |ft        d	      ft(        |ft        d	      ft*        |ft        d	      ft,        |ft        d	      ffD ]  \  }}}t/        |||        y )NrB  r   r  r9  i N  r  r6  Tr:  )overwrite_b)r;  rM  )rS   rF   r   r:   r@   r<  r=  r>  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   rJ  )	r  Rr  r   LUpivrH  r[  rI  s	            r]   test_lapack_misalignedrR  
  s    	rA
		#AAG
		%rxx(A
affQc?AAG
AlGB1$./qdDT23!t-.dt45S	1~t'=>QFDTtDE1$./1$./1$./qdDF#qdDT23tTd34!t-.!t-.!t56QD$401!! 4tV$ 	 dF3%4r_   c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestOverwritec                 J    t        t        dg       t        t        ddg       y Nr   )rG   r
   r?  s    r]   test_eigzTestOverwrite.test_eig  s    C&*C&&!12r_   c                 J    t        t        dg       t        t        ddg       y rV  )rG   r   r?  s    r]   	test_eighzTestOverwrite.test_eigh  s    D6(+D66"23r_   c                 &    t        t        dg       y Nr  )rG   r   r?  s    r]   r  zTestOverwrite.test_eig_banded
      J1r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_eigvalszTestOverwrite.test_eigvals      GfX.r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_eigvalshzTestOverwrite.test_eigvalsh  s    Hvh/r_   c                 &    t        t        dg       y r[  )rG   r   r?  s    r]   r  z!TestOverwrite.test_eigvals_banded  s    NVH5r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_hessenbergzTestOverwrite.test_hessenberg  r\  r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_lu_factorzTestOverwrite.test_lu_factor  s    Ix0r_   c                 x    t        j                  g dg dg dg      }t        |      t        fddg       y )Nrr   r  )r  ri  ri  c                     t        |       S r=  )r   )r   xlus    r]   rO  z-TestOverwrite.test_lu_solve.<locals>.<lambda>  s    hsA&6 r_   )rs   )rS   r4   r   rG   )r{   r  ri  s     @r]   test_lu_solvezTestOverwrite.test_lu_solve  s.    HHiI67l6?r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_luzTestOverwrite.test_lu!      B)r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_qrzTestOverwrite.test_qr$  rm  r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_rqzTestOverwrite.test_rq'  rm  r_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   
test_schurzTestOverwrite.test_schur*  s    EF8,r_   c                 `    t        d dgt        j                  t        j                  g       y )Nc                     t        | d      S )Nr   )r   r|   s    r]   rO  z2TestOverwrite.test_schur_complex.<locals>.<lambda>.  s    eAy&9 r_   r   )dtypes)rG   rS   r;   r$  r?  s    r]   test_schur_complexz TestOverwrite.test_schur_complex-  s!    9F8$&JJ

#;	=r_   c                 B    t        t        dg       t        d dg       y )Nr   c                     t        | d      S )NrI  r  )r   rv  s    r]   rO  z(TestOverwrite.test_svd.<locals>.<lambda>3  s    c!7&C r_   )rG   r   r?  s    r]   test_svdzTestOverwrite.test_svd1  s    C&*CfXNr_   c                 &    t        t        dg       y rV  )rG   r   r?  s    r]   test_svdvalszTestOverwrite.test_svdvals5  r_  r_   N)r   r   r   rW  rY  r  r^  ra  r  rd  rf  rj  rl  ro  rq  rs  rx  r{  r}  r   r_   r]   rT  rT    sT    342/0621@
***-=O/r_   rT  c                 V   t        j                  | dft              j                  |      }t        j                  |      j
                  }d|z  }t        |      }t        |j                  | df       t        ||j                         |       t        |j                        }t        |j                  d       t        ||j                         |       | dkD  r|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 )NrQ   r   r  ra   r+  rQ   ra   ru   -C6?MbP?rcondư>rv   )rS   r   r   rX   r  r  r   r   r@   r   meanrW   rT   r  rU   )rY   r[   skip_bigXr  r   Yri   s           r]   _check_orthr  9  sJ   
Ae$++E2A
((5/

C
*CQA1a&!Aqvvxc*QSS	A&!Aqvvxc*1uXii##A&HHQNSXXa^+sxx1~%A66HHUO$QWWq!f%$QWWq%j) ur_   ri  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  rS   r$  MemoryErrorAssertionError)rY   r  s     r]   test_orth_memory_efficiencyr  T  sA     	AArzzD1 <
	s   ! 	;6;c                      t         j                  t         j                  t         j                  t         j                  g} g d}t        j                  | |      D ]  \  }}t        ||        y )Nra   rQ   rs   rB  r  )rS   r;   r$  r<   r&  	itertoolsproductr  )rw  r'  r   rY   s       r]   	test_orthr  e  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   rQ   )rS   r   rF   r   r[   r@   )r   r|   rB  oas       r]   test_orth_emptyr  k  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 )Nra   r  rQ   r   r  r   r+  r  ru   r  r  r  r  rv   )rS   rT   r  r;   r$  r<   r&  r  r  r   r  r  r%   r   r@   r   rW   randnrU   rX   )
r{   ri   rw  r'  r   rY   r  r  r   r  s
             r]   test_null_spacezTestNullSpace.test_null_spacev  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  )rS   r   rF   r%   r@   r[   )r{   r   r|   rB  nsas        r]   test_null_space_emptyz#TestNullSpace.test_null_space_empty  sY    HHV2&VVAR myyF"""yyJrN00000r_   r;  TFr   r  r  rI  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 rB  ra   rQ   )r;  r   r  r   r  r+  )
rS   rT   default_rngstandard_normalr%   r   r   r  r[   r  )r{   r;  r   r  ri   rY   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   rd   r   rS   r;   r   r<   r  r  r   r_   r]   r  r  u  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 ) Nri  rs   r%  r*  r+  ra   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rQ   r   rY  rZ  gL0?gĹ-?gyv?r   rc  )r   ra   r   )r   r   ra   r   rG  r  rh  r   r   r   r   rP  )r"   r   r   r!   rS   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)rS   einsum)r{   r|   r   s      r]   matmulzTestCDF2RDF.matmul  s    yy-q!44r_   c                 \    t        | j                  ||      | j                  ||             y r=  )r   r  )r{   r}   rl   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   )rS   r   r&   r  r{   r  r}   rl   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 )Nra   rQ   rs   r   rS   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 )Nra   rQ   r   r  r  s         r]   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complex  sT    HHq!fr1g&'yy}}Q1ABb"a(r_   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y )Nrr   rt   r  r  s         r]   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_real  sN    HHiI67yy}}Q1ABb"a(r_   c                     t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        ||      \  }}| j                  |||       y Nrr   )r   r  ru   )r   r  r  r  r  s         r]   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex  sN    HHiJ78yy}}Q1ABb"a(r_   c                 .   t        dd      D ]  }t        j                  j                  d       t        j                  j	                  d||      }t        j
                  j                  |      \  }}t        ||      \  }}| j                  |||        y )Nra   r  iɚ;r  )	r   rS   rT   r  rU   r7   r
   r&   r  r{   r  r  r}   rl   r  r   s          r]   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arrays  st    q! 	-AIINN9%		sAq)A99==#DAqQ]FB!!"b!,	-r_   c                     t        dd      D ]h  }t        j                  j                  dd||      }t        j                  j                  |      \  }}t        ||      \  }}| j                  |||       j y )Nra   r  rB  )r   rS   rT   rU   r7   r
   r&   r  r  s          r]   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays(  sf    q! 	-A		r2q!,A99==#DAqQ]FB!!"b!,		-r_   c                     t        j                  d      t        j                  d      }}t        t        t
        ||       y )Nr   )rQ   )rS   r   r4   r  r  r&   r{   r}   rl   s      r]   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error0  s)    xx|RXXd^1j'1a0r_   c                     t        j                  d      t        j                  d      j                  dd      }}t        t        t
        ||       y )Nrs   rv   rQ   rS   r:   r  r  r  r&   r  s      r]   r  z!TestCDF2RDF.test_not_square_error4  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  rS   r4   r7   r
   r  r  r&   r{   r  r}   rl   s       r]   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error9  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 )Nrs   r   r  r  r  s      r]   test_non_associated_errorz%TestCDF2RDF.test_non_associated_error?  s6    yy|RYYr]221a81j'1a0r_   c                 r   t        j                  g dg dg dg      }t         j                  j                  |      \  }}t	        t
        t        ||       t        j                  g dg dg dgg dg dg dgg      }t         j                  j                  |      \  }}t	        t
        t        ||       y )Nrr   r   )rQ   ru   y      @      r  r  s       r]   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairsD  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sysnumpyrS   numpy.testingr   r   r   r   r   r   r   r	   r  scipy.linalgr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   scipy.linalg.lapackr(   r)   r*   r+   r,   r-   r.   r/   r0   scipy.linalg._miscr1   scipy.linalg._decomp_qzr2   scipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   scipy.linalg._testutilsrG   scipy.sparse._sputilsrH   scipy._lib._testutilsrI   scipy.linalg.blasrJ   scipy.__config__rK   ImportErrormachineIS_WASMr   r^   r$  REAL_DTYPESr&  rR   r  rn   rp   r   r;  r  r  r  rH  r   rE  r  rL  rN  ra  re  r!  r;  rq  blas_providerblas_versionr  r  r  r  r@  rC  rE  rJ  xfailrR  rT  r  rF  r[   intprG  r  r  r   rd   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& O&ff$ f$P	~! ~!BJ$ J$XM# M#^M  G$;<r  =; ;|E EE
. E
.PN- N-b}4 }4@Y# Y#x  $ #	/08@M./7	BLp' p'fG5 G5T> ><- -6
 $H$$&)3/  1
1
#$ uL  N4N4@5/ 5/p*6 HBHHRWW%..2?  AA  UBJJNO P8B 8BvB;J[1 [1_^  Fs   M4 4M?>M?