
    ^Mh                    <   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 n# e[$ r dZZY nw xY wej        dk    p ej\                    dv Z]de^fdZ_ejE        ej`        gZaejF        ejb        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jm        n                    e]d"#          ejm        o                    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jm        n                     ej\                    d?k    d@#          dA             Z~dB ZdC Zejm                            ddDE          dF             Z G dG dH          ZdUdIZejm        j        ejm        n                     ej        ej                  j        dJk     dK#          dL                         ZdM Zejm                            dNee^ejE        eejF        g          dO             Z G dP dQ          ZdR Z G dS dT          ZdS )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 rdt          j                            | |           t          j                            | |           dz  z   }||                                j        z   dz  }n-t          j                            | |           }||j        z   dz  }|r*|t          d| z            t          j        |           z  z  }|                    |          S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprandomrandconjTr>   rF   astype)nposdefdtypeAs       ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr^   ,   s    INN1a  29>>!Q#7#7#<<^QINN1a  WaK !	T!A#YYrvayy  88E??    c                    t          | t                    r| }|                    |          dz  dz
  }nLt          | t                    r(t	          | j                  dk    r| j        d         }| }nt          d          t          j        |          }|j	        
                                t          |          z  |z  }d|j	        |z   z  }|S )a  Return a random symmetric (Hermitian) matrix.

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

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    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## 5JJsOOA!
['
*
* 5
k
 
 A
%
%"3444A	

T!WWq AQSUAHr_   c                   x    e Zd Zd Zd Zd Zd Zej        	                    de
eeeeg          d             ZdS )TestEigValsc                     g dg dg dg}t          |          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )Nra   rQ      rQ         	   ]   rQ   r   r   r>   r   selfawexact_ws       r]   test_simplezTestEigVals.test_simple^   sc    YY			999-AJJd2hhJ>1qbz1n5!!W-----r_   c                    t          g dg dg dgd          j        }|                                }|j        }t          |          }dt	          d          z   dz  ddt	          d          z
  dz  g}t          ||           d S )Nrr   rt   rk   rw   rx   rQ   r   )r4   rW   copyr   r>   r   rz   s       r]   test_simple_trzTestEigVals.test_simple_trd   s    999iii3S99;FFHHCAJJd2hhJ>1qbz1n5!!W-----r_   c                     g dg dg dg}t          |          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )Nrr   rQ   ru   y      @      ?y      "@      ?y      W@      @rQ   r   ry   rz   s       r]   test_simple_complexzTestEigVals.test_simple_complexl   sm    YY			<<<0AJJe$a'e$a') 	"!W-----r_   c                     g dg dg dg}t          |d          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )	Nrr   rt   Fcheck_finiterw   rx   rQ   r   ry   rz   s       r]   test_finitezTestEigVals.test_finitet   sj    YY			999-AE***d2hhJ>1qbz1n5!!W-----r_   dtc                 r   t          j        d|          }t          |          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ t          |d          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ d S )Nr   r   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    HV2&&&AJJw$w'"&""5"5"566<<<<<A4000w&    w'"&""5"5"566<<<<<<<r_   N)__name__
__module____qualname__r   r   r   r   pytestmarkparametrizerd   floatr;   complexr<   r    r_   r]   rp   rp   \   s        . . .. . .. . .. . . [TC)#LMM= = NM= = =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                            deeej        eej        g          d             ZdS )TestEigc                 Z   t          g dg dg dg          }t          |          \  }}dt          d          z   dz  ddt          d          z
  dz  g}t          dddt          d          dz  z   dz  g          }t          g d	          }t          dddt          d          dz  z
  dz  g          }|t          |          z  }|t          |          z  }|t          |          z  }t	          ||           t	          ||d d df         t          |d
                   z             t	          ||d d df         t          |d                   z             t	          ||d d df         t          |d                   z             t          d          D ]2}t	          ||d d |f         z  ||         |d d |f         z             3t          |dd          \  }}t          d          D ]7}t	          |j        |d d |f         z  ||         |d d |f         z             8d S )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   s8   999iii3441vv1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@11A&&&1q 	C 	CA%acAaaadGmQqT!AAAqD'\BBBB	C 	Cr_   c                    t          ddgddgg          }t          |dd          \  }}}t          |t          ddg                     t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )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%8999q 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r_   c                    t          g dg dg dg          }t          |dd          \  }}}t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )Nrr   r   ra   r   rs   )r4   r
   r   r   rV   rW   r   s         r]   r   zTestEig.test_simple_complex   s    999iii677+++	2rq 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r_   c                 8   dgg}dgg}t          ||d          \  }}t          |d         d           t          |d         dk               t          |d           t          ||          \  }}t          |t          j                   t          |d           d S )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   s    SESEAqd3332$###$1AAq		2QAr_   vIh%<=c           	         |!t          |          t          |          }}|}n$t          |          }|}t          j        |j         }d|d|}t	          ||d          \  }	}
t          ||d          }||
z  |	dd d f         z  }||
z  |	dd d f         z  }t          |j        d                   D ]*}t          |d d |f         |d d |f         |||           +|4t          |	dd d f         d           t          |dd d f         d           t          j        |	          }t          j        |          }t          |	d d |f         |d d |f         dd|           t          j	        t          |
                    }t          t          |
                    D ]}t          |
d d |f                   ||<   t          |t          j        |j                  |dd	           |	dd d f         dk    }|	d|f         |	d|f         z  }t	          ||          \  }	}
t          ||          }||
z  }||
z  |	z  }||z
  }t          |j        d                   D ]K}t          j        t          |d d |f                             rt          |d d |f         d|||           L|	t          |	                   }|t          |                   }d
t          j        d|z  d          z  }d
t          j        d|z  d          z  }t#          t%          |          |j        z             }t#          t%          |          |j        z             }t          ||         ||         dd|           t          j	        t          |
                    }t          t          |
                    D ]}t          |
d d |f                   ||<   t          |t          j        |j                  |           t          t)          |          t)          |	t          j        |	                                        d S )N
Tr   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   sv   =1::wqzzqABB

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

2Q^^2v2vzTksy|$$ 	C 	CAvhs111a4y))** CAAAqD	1%)cC C C C (1++HRLL! b&r%xU;;;;r'6	u====s5zzEJ.//Ffk122dVE]!c	; 	; 	; 	; #b''""s2ww 	' 	'AR1XF1II 4 4cBBBB 	R$qQ'8"9"9:::::r_   c                    t          g dg dg dg dg dg          }t          g dg dg dg d	g d
g          }t          j        d          5  |                     ||dd           d d d            d S # 1 swxY w Y   d S )N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   r   )r4   rS   errstater   r{   r\   r   s      r]   test_singularzTestEig.test_singular  s2    '''''''''''''''	) * *
 '''''''''''''''	) * * [X&&& 	D 	D1UCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A99A= A=c                    t          t          g d                    }t          g dg dg df          }t          g dg dg df          }t          d          }t          d	          }t	          j        ||g|| gg          }t	          j        ||g||gg          }t	          j        d
          5  |                     ||           d d d            d S # 1 swxY w Y   d S )N)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  s8   yyy!!"";;;[[[9:::::zzz999566&MMVVHr1gA2w'((Hq"g1v&''[X&&& 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   7CC"Cc                     d }t          j        d          5  t          d          D ]-} ||dz  dz            \  }}|                     ||           .	 d d d            d S # 1 swxY w Y   d S )Nc                 n    d| dz  z   }d| z  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	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&  s}    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#  s    	 	 	 [X&&& 	* 	*3ZZ * *xad3h///1##Aq))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   >A%%A),A)c                    t           j                            d          }t          d|          }|                     |d            t          d|          }|                     ||           |                    d          d|                    d          z  z   }|                     |d            |                    d          d|                    d          z  z   }|                     ||           d S )N  rs   r  rP   )rS   rT   RandomStatern   r   )r{   ri   r\   r   s       r]   test_make_eigvalszTestEig.test_make_eigvals:  s     i##D))AsOOAt$$$AsOOAq!!!JJvCJJv$6$6!66At$$$JJvCJJv$6$6!66Aq!!!!!r_   c                    g dg dg dg}t          |d          \  }}dt          d          z   dz  ddt          d          z
  dz  g}t          d	d	d	t          d          d
z  z   dz  g          }t          g d          }t          d	d	d	t          d          d
z  z
  dz  g          }|t          |          z  }|t          |          z  }|t          |          z  }t	          ||           t	          ||d d df         t          |d                   z             t	          ||d d d	f         t          |d                   z             t	          ||d d df         t          |d                   z             t          d
          D ]2}t	          ||d d |f         z  ||         |d d |f         z             3d S )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  s   YY			999-15)))1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@	A 	Ar_   c                     t          j        d                              dd          }t          t          t
          |           dS )z:Check that passing a non-square array raises a ValueError.rv   rs   rQ   N)rS   r:   reshapeassert_raises
ValueErrorr
   )r{   r\   s     r]   test_not_square_errorzTestEig.test_not_square_errorY  s7    IaLL  A&&j#q)))))r_   c                     t          d          }t          j        d                              dd          }t	          t
          t          ||           t	          t
          t          ||           dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rQ         "@rs   N)rF   rS   r:   r  r  r  r
   r   s      r]   test_shape_mismatchzTestEig.test_shape_mismatch^  sZ     FFIcNN""1a((j#q!,,,j#q!,,,,,r_   c                    t          j        g dg dg dg dgd          }t          j        g dg dg d	g d
gd          }t          ||          \  }}t           j                                        5 }|                    t          d           t          j        |dd                                          sJ t          j        |dd                                          sJ 	 d d d            d S # 1 swxY w Y   d S )N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r$  g      L@g      Z@g      o@float64r   )       @      @      $@r#  )r   r        &@g      =@)r        @g      *@g      ?@)r   r)  g      1@g     A@z%invalid value encountered in multiplyr'  +=r          @)	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    H/////////0002 :CD D D H,,,,,,,,,---/ 7@A A A
 1ayy1 Z))++ 	8sJJ~'NOOO:a51115577777:a511155777777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   6A2C66C:=C:r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}|j        dk    sJ |j        |j        k    sJ t          |t          j        d                     |j        dk    sJ |j        |j        k    sJ t          |d          \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ d S )Nr   r   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   HV2&&&A2q+++,,	Tw$w#)####BHV,,---x6!!!!x4:%%%%A40002w&    w#)####x6!!!!x4:%%%%%%r_   N)r   r   r   r   )r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r6  r   r   r   rd   r   rS   r;   r   r<   r   r   r_   r]   r   r      s2       C C C(< < << < <
 
 
 AF49H; H; H; H;TD D D"& & &* * *." " "A A A"* * *
- - -8 8 88 [TC
GR\#RSS& & TS& & &r_   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej                            deeej        eej        g          d             ZdS )TestEigBandedc                 .    |                                   d S N)create_bandmatr{   s    r]   setup_methodzTestEigBanded.setup_method  s    r_   c                    d}d| _         d| _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    d	t          t          |dz
  d          d          z  z   d	t          t          |dz
  d          d          z  z
  t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d
          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        d	t          t          |d                    z  t          t          |dz
  d          d          z   d	t          t          |dz
  d
          d          z  z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        | j        dz   }t!          ||ft"                    | _        t!          ||ft&                    | _        t+          |          D ]P}t          | j        |          | j        ||z
  dz
  ||f<   t          | j        |          | j        ||z
  dz
  ||f<   Qd| j         z  | j        z   dz   }t!          ||ft"                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}t          | j        |dz             | j        d| j         z  dz
  |z
  |dz   |f<   t          | j        | dz
            | j        d| j         z  dz   |z   d|dz
  |z
  f<   qt!          ||ft&                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}t          | j        |dz             | j        d| j         z  dz
  |z
  |dz   |f<   t          | j        | dz
            | j        d| j         z  dz   |z   d|dz
  |z
  f<   qdt1          |          z  | _        | j        dz  | _        dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   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346:4!T??A6N6NOtAaC3346:4!T??A6N6NO
 d1dmm,,d4!S>>26667d4!S>>15556  QqS$445  QqS$33	4 d1cll++QqS$4457;D1dOOQ7O7OPQqS#3346:4!T??A6N6NO
 Da...QqS$445d4!T??A6667  QqS#334  QqS$33	4 DL))BWr{{Dqqq$wKDM**BWr{{T(4[
 w{ $%888!4)7;;;t 	F 	FA.24<.C.CDT!VAXqs]+/3DM1/E/EDd1fQh!m,, y47"Q&!4)5999*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 "4)7;;;*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 VAYY&F#r_   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.ra   	compute_vN)r,   rS  r8   r   rA   rO  r   rP  r{   r}   evecinfoevec_s        r]   
test_dsbevzTestEigBanded.test_dsbev  sv     d.!<<<4QQQ

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

]#!$q''4>:::!#e**c$2C.D.DEEEEEr_   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        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 %A %A!4eTQQQ

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

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr_   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.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 %A %A!4eTQQQ

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr_   c                 T   t          | j                  }|j        }t          t	          |          | j                   t          | j                  }|j        }t          t	          |          | j                   d}t          j	        d          }t          | j        d||f          }t          t	          |          | j        ||dz                       t          | j        d||f          }t          t	          |          | j        ||dz                       | j        |         dz
  }| j        |         dz   }t          | j        d||f          }	t          t	          |	          | j        ||dz                       | j        |         dz
  }| j        |         dz   }t          | j        d||f          }
t          t	          |
          | j        ||dz                       t          | j        d	          }|j        }t          t	          |          | j                   d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.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  sK   t/00
!$u++t~>>> 122!$v,,@@@ {1~~"4#3*-T4LJ J J	!$y//"&.d1f"=	? 	? 	?#D$5+.dD\K K K
!$z"2"2"&/$tAv+">	@ 	@ 	@ .&/.&/"4#3*-Wg<NP P P	!$y//"&.d1f"=	? 	? 	? /$'&0/$'&0#D$5+.2971CE E E
 	"$z"2"2"&/$tAv+">	@ 	@ 	@ t/eDDD
!$u++t~>>>>>r_   c           
         t          | j                  \  }}|ddt          |j                  f         }t	          t          |          | j                   t	          t          |          t          | j                             t          | j	                  \  }}|ddt          |j                  f         }t	          t          |          | j
                   t	          t          |          t          | j                             d}d}t          | j        d||f          \  }	}
t	          t          |	          | j        ||dz                       t	          t          |
          t          | j        dd||dz   f                              t          | j	        d||f          \  }}t	          t          |          | j
        ||dz                       t	          t          |          t          | j        dd||dz   f                              | j        |         dz
  }| j        |         dz   }t          | j        d||f          \  }}t	          t          |          | j        ||dz                       t	          t          |          t          | j        dd||dz   f                              | j
        |         dz
  }| j
        |         dz   }t          | j	        d||f          \  }}t	          t          |          | j
        ||dz                       t	          t          |          t          | j        dd||dz   f                              t          | j        d	
          \  }}|ddt          |j                  f         }t	          t          |          | j                   t	          t          |          t          | j                             dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. 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66xQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIII&t'899	qqq'&+"6"667
!$v,,@@@!#j//3t7I3J3JKKK ",T-=47;?,#H #H #H	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J %/t/@69=A4L%J %J %J!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K .&/.&/",T-=47;BG:L#N #N #N	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J /$'&0/$'&0$.t/@69=Dg<N%P %P %P!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K %T%5EJJJxQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIIIIIr_   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.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#)$*;TWdg#N#N dD ail+,,tw()) 	? 	?Al1TW9Q;q=!A#a%#78!A#>>>AA !<<<ue!!U+++++r_   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.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          ||           dS )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  sm     $*$*;TWdg#N#N dDtwFF4T]DF33!!U+++++r_   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r*   rV  rH  rI  r+   rW  r7   r   rM  r   r  s         r]   test_zgbtrszTestEigBanded.test_zgbtrs  sm     $*$*;TWdg#N#N dDtw$GG4T]DG44!!U+++++r_   r   c                    t          j        d|          }t          |          \  }}t          t          j        ddgddgg|                    \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ t          |d          }|j        dk    sJ |j        |j        k    sJ d S )Nr   r   r   ra   r   Teigvals_only)rS   r   r   r4   r@   r[   )r{   r   a_bandr}   rl   r8  v_ns          r]   r   zTestEigBanded.test_empty  s    &+++&!!1bhAA'7rBBBCCSw$w#)####w&    w#)####vD111w$w#)######r_   N)r   r   r   r@  r>  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$ M$ M$bF F FF F F	F 	F 	FG G G	G 	G 	G(? (? (?T8J 8J 8Jt, , ,, , ,, , ,, , , [TC
GR\#RSS$ $ TS$ $ $r_   r;  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestEigTridiagonalc                 .    |                                   d S r=  )create_trimatr?  s    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         | _
        dS )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dfTVR(8(884??JDM**BWr{{Dqqq$wK			r_   c                    t          t          t          | j        | j        dd                    t          t
          t          | j        | j        dz             t          t
          t          | j        | j        d           t          t          t          | j        | j        d           t          t          t          | j        | j        dd	           dS )
zTest error conditions.Nr   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sLLLi!5tvtv{KKKi!5tvtv$&	( 	( 	( 	(j"6$)	+ 	+ 	+ 	+ 	j"6 w	8 	8 	8 	8 	8 	8r_   c           
      "   dD ]@}t          | j        | j        |          }t          t	          |          | j                   AdD ],}t          t          t           | j        | j        |dd           -dD ]}t          | j        | j        ddt          | j                  d	z
  f|
          }t          t	          |          | j                   d}d}t          | j        | j        d||f|
          }t          t	          |          | j        ||d	z                       | j        |         dz
  }| j        |         dz   }t          | j        | j        d||f|
          }t          t	          |          | j        ||d	z                       dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r   r   r  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  s    B 	7 	7F$TVTV6JJJA%d1ggtv6666' 	/ 	/F*&:DFDF(.s'-/ / / / / 1 	H 	HF(s!S[[]9K$& & &E &d5kk46::: DD(s$$& & &E &d5kk46$tAv+3FGGG fTlV+GfTlV+G(s'79K$& & &E &d5kk46$tAv+3FGGGG+	H 	Hr_   c                 n   t          t          t          | j        | j        d           dD ]}t          | j        | j        |          \  }}|ddt          |          f         }t          t          |          | j                   t          t          |          t          | j
                             t          t          t          | j        | j        ddd           d	D ]}d
}t          | j                  dz
  }t          | j        | j        d||f|          \  }}t          t          |          | j                   t          t          |          t          | j
                             d}d}t          | j        | j        d||f|          \  }}t          t          |          | j        ||dz                       t          t          |          t          | j
        dd||dz   f                              | j        |         dz
  }| j        |         dz   }t          | j        | j        d||f|          \  }}t          t          |          | j        ||dz                       t          t          |          t          | j
        dd||dz   f                              dS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   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  s    	j"2DFDF$+	- 	- 	- 	-8 	B 	BF&tvtvVLLLGAtGAJJ'E%d1ggtv666%c%jj#di..AAAAj"2DFDF$*3V	M 	M 	M 	M0 	F 	FFDtv;;q=D&s$$& & &GAt &d1ggtv666%c$iiTY@@@DD&s$$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F fTlV+GfTlV+G&s'79K$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F F3	F 	Fr_   c                    t          j        dg          }t          j        g           }t          ||d          }|j        dk    sJ t	          ||           t          ||dd          \  }}|j        dk    sJ |j        dk    sJ t	          ||           t	          |t          d	gg                     t          ||d
d          \  }}|j        dk    sJ |j        dk    sJ |j        dk    sJ dS )zSee gh-20075rE  Tr  ra   r   r   rs  rQ   rC  rl   )r   r   r   r   r   N)rS   r4   r$   ndimr   r   r@   )r{   r|   r   xr4  s        r]   test_eigh_tridiagonal_1x1z,TestEigTridiagonal.test_eigh_tridiagonal_1x1/  s   HdVHRLLQ555v{{{{11SvFFF1v{{{{v{{{{152$==)))1SwGGG1v{{{{w$w&      r_   N)	r   r   r   r@  r  r  r  r  r  r   r_   r]   r  r    sv               8 8 8 H  H  HD(F (F (FT! ! ! ! !r_   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            de          e	j
                            dd	          d
                         Ze	j
                            dd	          d             Ze	j
                            dd          e	j
                            dd          d                         Zd Ze	j
                            deeej        eej        g          d             ZdS )TestEighc                 D    t           j                            d           d S )Nr  )rS   rT   seedr?  s    r]   setup_classzTestEigh.setup_classC  s    
	tr_   c           	      L   t          t          t          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg          d           t          t          t          t          j        ddg          t          j        ddg          ddgddg           t          t          t          t          j        ddg          t          j        ddg          ddg           t          t          t          t          j        ddg          t          j        ddg          d	dg           t          t          t          t          j        ddg          t          j        ddg          ddg           t          t          t          t          j        ddg          t          j        ddg          ddg
           t          t          t          t          j        ddg          d           t          t          t          t          j        ddg          d d           t          t          t          t          j        ddg          t          j        ddg          d           t          t          t          t          j        ddg          t          j        ddg          dddg           t          t          t          t          j        ddg          t          j        ddg          dddg           d S )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  s   j$A888j$A!QIIIj$A!QIIIj$A!Q	 	 	 	 	j$A!Q'(!fq!f	F 	F 	F 	F 	j$A!Q'(!f	. 	. 	. 	. 	j$A!Q')1g	/ 	/ 	/ 	/ 	j$A!Q'(!f	. 	. 	. 	. 	j$A!Q'(!f	. 	. 	. 	. 	j$AHHHHj$AeLLLLj$A!Q"	$ 	$ 	$ 	$ 	j$A!Q"QF	< 	< 	< 	<j$A!Q"QF	< 	< 	< 	< 	< 	<r_   c           	          t          t          t          t          j        ddg          t          j        ddg                     d S )Nrs   )r  r'   r   rS   r   r?  s    r]   test_nonpositive_bzTestEigh.test_nonpositive_bl  s4    k4!Q"'1a&//JJJJJr_   c                    t          t                    D ]\  }}t          d|          }t          |ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ t          dd|          }t          ||ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ d S )	N   r   r   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666AB7333DAqSVV,,,B1q5)*****(DCCCA1r1g666DAqSVV,,,B1q5)******
	+ 
	+r_   c                     t          ddgddgg          }t          ddgddgg          }t          |          \  }}t          ||          \  }}d S )Nra   rQ      rs   ru   )r4   r   )r{   r|   r   r}   zs        r]   test_eigh_integerzTestEigh.test_eigh_integer}  sZ    Aq6Aq6"##Aq6Aq6"##Aww1Aqzz111r_   c                     dd l }|j                            d                                          }t	          j        |          }t          t          t          |           t          t          t          |           d S )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    L!!!$$**,,M!j$***j$*****r_   dtype_r  )rZ  evdr  evxc                     t          d|          }t          ||          \  }}t          ||z  ||z  z
  ddt          j        |          j        z  d           d S )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  su     %r888Af%%%1AQ!"(6"2"2"66	! 	! 	! 	! 	! 	!r_   c                 b   t          dgg|          \  }}t          |t          dg          d           t          |t          dgg          d           t          dgg|          \  }}t          |t          dg          d           t          |t          dgg          d           d S )Nra   r  rC  V瞯<r,  rP   r   )r   r   r4   )r{   r  r}   rl   s       r]   test_1x1_lworkzTestEigh.test_1x1_lwork  s    aSE&)))15";;U333352$==u5555 bTF6***15!::E222252$==u555555r_   r  rr   )gvr  r  c                 t   t          j        d          }t          d          }t          dd          }t          ||||          \  }}|dk    r!t	          ||z  |||z  z  z
  d|d           d S |d	k    r!t	          ||z  |z  ||z  z
  d|d           d S t	          ||z  |z  ||z  z
  d|d           d S )
Ng     @r  T)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     z%  $R(($R555a1V$7771199AEAq1uI-r2FFFFFFQYYAEAIA-r2FFFFFFAEAIA-r2FFFFFFr_   c                    t          d          }t          |ddg          }t          t          |          d           t          |ddg          }t          t          |          d           t	          ||           t          j        g d          }t          |ddg          }t          t          |          d           t	          |t          j        dd	g                     d S )
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VVQa!Q000SWWa   2G)))**a!S222SWWa   BHc3Z0011111r_   r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ t          |d          }t          |t          j        d                     |j        dk    sJ |j        |j        k    sJ d S )Nr   r   rQ   r   Tr  )rS   r   r   rF   r@   r[   r   )r{   r   r|   r}   rl   r8  r  s          r]   r   zTestEigh.test_empty  s    HV2&&&Aww1q+++,,Sw$w#)####w&    w#)####&&&28D>>***w$w#)######r_   N)r   r   r   r  r  r  r  r  r  r   r   r   r  r  r  r  r  rd   r   rS   r;   r   r<   r   r   r_   r]   r  r  B  s         $< $< $<LK K K+ + +  + + + [Xv..[X'BCC! ! DC /.! [X'BCC6 6 DC6 [VY//[X';<<
G 
G =< 0/
G2 2 2 [TC
GR\#RSS$ $ TS$ $ $r_   r  c                   D   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                            e d          ej        j        d                         Zej                            dg d          ej                            dg d          ej                            de          d                                     Zej                            deeej        eej        g          ej                            dg d          d                         ZdS )TestSVD_GESDDgesddc                     t          t          t          dggd           t          t          t          dggd           d S )NrC  r  r  )r  rf   r   r  r?  s    r]   r  zTestSVD_GESDD.test_degenerate  s>    itfB????j#vUCCCCCCr_   c                    g dg dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )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    YY


III.* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r_   c                    g dg dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nrr   rt   r  r  rs   r   r  r  s           r]   test_simple_singularz"TestSVD_GESDD.test_simple_singular  s    YY			999-* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r_   c                    g dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          |j        d                              t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )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    YY			"* 	9 	9M1M)-);= = =HAq"%acAgs171:???171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r_   c                    ddgddgddgg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          |j        d                              t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )	Nra   rQ   r  ru   rs   r  r  r   r  r  s           r]   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet  s   VaVaV$* 	9 	9M1M)-);= = =HAq"%acAgs171:???%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r_   c           
         t           j                            d          }d}d}t          d          D ](}|                    ||g          |                    ||g          fD ]}dD ]}t	          ||| j                  \  }}}	t          |j        |z  t          |j	        d                              t          |	|	j        z  t          |	j	        d                              t          |j	        d         |	j	        d         f|j        j                  }
t          t          |                    D ]}||         |
||f<   t          ||
z  |	z  |           *d S )	Nr  r  r   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  sq   i##D))q 
	A 
	AAjj!Q((#**aV*<*<= 	A 	A%2 A AM"1M151C E  E  EHAq"-acAgs171:GGG-b24iRXa[9I9IJJJ!171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@A	A
	A 
	Ar_   c                 P   g dg dg dg}dD ]}t          ||| j                  \  }}}t          |                                j        |z  t          |j        d                              t          |                                j        |z  t          |j        d                              t          |j        d         |j        d         f|j        j	                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )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   YY


III.* 	9 	9M1M)-);= = =HAq"%affhhj1nc!'!*ooFFF%bggiikB&6BHQK8H8HIII171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r_   c           
         t           j                            d          }d}d}t          d          D ];}dD ]4}|                    ||g          |                    ||g          fD ]}|d|                    t	          |j                            z  z   }t          ||| j                  \  }}}	t          |	                                j
        |z  t          |j        d                              t          |j        d         |	j        d	         f|j        j                  }
t          t          |                    D ]}||         |
||f<   t          ||
z  |	z  |           6=d S )
Nr  r  r   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   i##D))q 	A 	AA!. A A**aV,,cjj!Q.@.@A A AABszz$qw--8888A"1M151C E  E  EHAq"-affhhj1n.1!'!*oo? ? ?
 "171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@AA	A 	Ar_   c                    t           j                            d          }g d}|D ]f}t           j        t           j        t           j        t           j        fD ]5} |j        |                     |          }t          || j
                   6gd S )Nr  ))r   r   )r   2   )<   r  r  )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    i##D))/// 	9 	9Bz2:r|R]K 9 9CHbM((,,AT%7888889	9 	9r_   c                    g dg dg dg}t          |d| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )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    YY


III.quD<NOOO1b!!#'3q66222!"$)SVV444qwqz28A;/>>s1vv 	 	AA$E!Q$KK!!e)b.!44444r_   c                 r    t          j        g dg dg dg dg          }t          || j                   d S )N)K}\UU?vWUU?r,  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  s^     H============?@ @
 	AT/000000r_   z64-bit LAPACK requiredreasonc                    t          d           t          j        ddgt          j                  }d|d<   t	          |d          \  }}}t          |d	         d
           t          |d         |d         z  d
           d S )NihB  )free_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  s     	%((((HaZrz222%q...1b!c"""$"U)+S11111r_   r  r   ra   rQ   rY   r[   c                    t          j        ||f|          }t          ||          }|j        j        }|dv r|                                n|}t          |          \  }}	}
t          |j        ||f           t          |j        |           t          |	j        |f           t          |	j        t          j        |                     t          |
j        ||f           t          |
j        |           t          |d          \  }}	}
t          |j        ||f           t          |j        |           t          |	j        |f           t          |	j        t          j        |                     t          |
j        ||f           t          |
j        |           t          |d          }	t          |	j        |f           t          |	j        t          j        |                     d S )Nr   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  s    HaV5)))1II&+tmmU[[]]]
a&&1aQWq!f%%%QWe$$$QWqd###QWbhz22333QWq!f%%%QWe$$$au---1aQWq!f%%%QWe$$$QWqd###QWbhz22333QWq!f%%%QWe$$$e$$$QWqd###QWbhz2233333r_   r   r  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 d S )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    VAR   WW
BHaV2&&&a&&1a2;q>>***28D>>***2;q>>***w"(""""w"(""""w"(""""au---1a28QF++,,,28D>>***28QF++,,,w"(""""w"(""""w"(""""e$$$28D>>***w"(""""""r_   N)r   r   r   r  r  r   r  r  r  r  r   r"  r)  r  r.  r   r   skipifrJ   slowr4  r   r  r>  rd   r   rS   r;   r   r<   r   r   r_   r]   r  r    s       MD D D
9 
9 
9
9 
9 
9	9 	9 	9
9 
9 
9A A A 
9 
9 
9A A A(9 9 95 5 51 1 1" [I.FGG[2 2  HG2 [S))),,[S))),,[Wf--4 4 .- -, -,44 [TC
GR\#RSS[Z)A)A)ABB# # CB TS# # #r_   r  c                       e Zd ZdZdS )TestSVD_GESVDgesvdN)r   r   r   r  r   r_   r]   rH  rH    s        MMMr_   rH  zout of memory in WASMr/  rB  c                      t          j        dt           j                  } t          t                    5  t          |            d d d            d S # 1 swxY w Y   d S )N)i  i  r   )rS   r   r%  r  r  r   )dfs    r]   test_svd_gesdd_nofegfaultrL    s    
 
w}BJ///B	z	"	"  B                 s   AAAc                       e Zd Zej                            deeej	        e
ej        g          d             Zd Zd Zd Zd Zd Zd Zd	 Zej        j        d
             ZdS )TestSVDValsr   c                 X   g gt          j        d          t          j        d          fD ]~}t          j        ||          }t	          |          }t          |t          j        d                     t	          t          j        d|                    }|j        |j        k    sJ d S )Nr   r   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    rx''8 	' 	'A"%%%A

ABHQKK(((,,,--B7bh&&&&&	' 	'r_   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nrr   rt   rs   r   ra   rQ   r   r   re   r{   r|   r  s      r]   r   zTestSVDVals.test_simple  sy    YY			999-AJJA!!!$$$$!$$$$%%%%%r_   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nrr   r  rQ   r   ra   rR  rS  s      r]   r  z TestSVDVals.test_simple_underdet  sW    YY			"AJJA!!!r_   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nra   rQ   r  ru   rs   r   rR  rS  s      r]   r  zTestSVDVals.test_simple_overdet  s]    VaVaV$AJJA!!!r_   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nrr   )ra   r                @rt   rs   r   ra   rQ   rR  rS  s      r]   r   zTestSVDVals.test_simple_complex  sy    YYYYY/AJJA!!!$$$$!$$$$%%%%%r_   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nrr   )r  y              @rv   rQ   r   ra   rR  rS  s      r]   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complex  sW    YY


#AJJA!!!r_   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nra   rQ   r  ru   rW  r   rR  rS  s      r]   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complex  s]    VaVb!W%AJJA!!!r_   c                     g dg dg dg}t          |d          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )	Nrr   rt   Fr   rs   r   ra   rQ   rR  rS  s      r]   r  zTestSVDVals.test_check_finite  s    YY			999-AE***A!!!$$$$!$$$$%%%%%r_   c                     t           j                            d           t           j                            dd          }t	          |           d S )Nr  i  i
  )rS   rT   r  rU   r   r{   r|   s     r]   test_crash_2609zTestSVDVals.test_crash_2609  s:    
	tINN4&&




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    s        [TC
GR\#RSS' ' TS'& & &    & & &    & & & [    r_   rN  c                       e Zd Zd ZdS )TestDiagSVDc                 Z    t          t          g ddd          g dg dg dg           d S )Nra   r   r   rs   r   )r   r   r?  s    r]   r   zTestDiagSVD.test_simple  sK    !')))Q":":#,99iii"C	E 	E 	E 	E 	Er_   N)r   r   r   r   r   r_   r]   ra  ra    s(        E E E E 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 Z6e7j8        9                    d5g d6          e7j8        9                    d7g d6          e7j8        9                    d8d9d:g          e7j8        9                    d;e:          d<                                                 Z;e7j8        9                    d=g d>          d?             Z<d@ Z=dAS )BTestQRc                     g dg dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S N   rQ   rs   rQ   rw   rs   ru   rs   rv   rs   r   r   rW   rF   r{   r|   qrs       r]   r   zTestQR.test_simple  s_    YY			999-!uu1!!#'3q66222!!a%+++++r_   c                    g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          ||           t          |t          d          d          \  }}t          ||           d S )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  s    YY			999-!uu1IIQ6**B!!a%,,,!!R(((QA//B!!R(((((r_   c                    g dg dg dg}t          |          \  }}g d}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )Nrh  rj  rk  rr   rs   rq  rr  s          r]   test_simple_rightzTestQR.test_simple_right  s    YY			999-!uu1IIQ""B!!a%,,,!!R(((As1vv&&A!!R(((((r_   c                    t          j        g dg dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )	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    J			999iii899Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r_   c                     g dg dg dg}t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )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  sn    YY			999-D)))
1dII!!Q55At!!a%,,,,,r_   c                     g dg dg dg}t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )Nrh  rj  rk  Trz  rr   r  r  s          r]   test_simple_right_pivotingz!TestQR.test_simple_right_pivoting  so    YY			999-D)))
1dII!!Q666At!!a%,,,,,r_   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )Nrh  rj  rQ   rl  rm  s       r]   test_simple_trapzTestQR.test_simple_trap&  Y    YY			"!uu1!!#'3q66222!!a%+++++r_   c                    t          j        g dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )Nrh  rj  Trz  ra   r   rQ   r|  r}  s           r]   test_simple_trap_pivotingz TestQR.test_simple_trap_pivoting,  s    J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r_   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S Nri  rQ   rw   ru   rs   rl  rm  s       r]   test_simple_tallzTestQR.test_simple_tall7  s_    VaVaV$!uu1!!#'3q66222!!a%+++++r_   c                    t          j        ddgddgddgg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d	         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )
Nri  rQ   rw   ru   rs   Trz  ra   r   r|  r}  s           r]   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting>  s    JAAA/00Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r_   c                    ddgddgddgg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d	           d S )
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  s    VaVaV$!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r_   c                    t          j        ddgddgddgg          }t          |dd          \  }}}t          t	          |                    }t          t          j        |d	d          |d d
         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f         d          \  }}t          ||           t          ||           d S )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    JAAA/00QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadG*---B!!R(((!!R(((((r_   c                    ddgddgddgg}t          |d          \  }}ddg}t          ||d	          \  }}t          ||z  |           t          ||           t          g d
          }t          ||d	d          \  }}t          ||d d         z  |           t          |t	          d          d	          \  }}t          ||           d S )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00As1vvv..A!"a(((((r_   c                 (   ddgddgddgg}t          |dd          \  }}}d	dg}t          ||d
d          \  }}}t          ||           t          ||z  |           t          |t	          d          d
d          \  }}}t          ||           d S )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5At4&&&!!a%,,,!!SVVVT::At!"a(((((r_   c                    ddgddgddgg}t          |d          \  }}g d}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )	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  s    VaVaV$!*%%%1IIQ""B!!a%,,,!!R(((As1vv&&A!"a(((((r_   c                    ddgddgddgg}t          |dd          \  }}}g d	}t          ||d
          \  }}}t          ||z  |           t          |t          d          d
          \  }}}t          ||           d S )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  s    VaVaV$Dz:::
1dII!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r_   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d           d S )Nri  rQ   ru   rj  rQ   r  rQ   rs   r  rm  s       r]   test_simple_fatzTestQR.test_simple_fat  s}    YY			"!uu1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r_   c                 V   t          j        g dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |j        d           t          |j        d	           t          |d d |f                   \  }}t          ||           t          ||           d S )
Nr  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   J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%AaaadGB!!R(((!!R(((((r_   c                    g dg dg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d           d S )Nrh  rQ   rw   ru   r  r  rQ   r  r  r  rm  s       r]   test_simple_fat_ezTestQR.test_simple_fat_e  s    YY			"!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r_   c                 \   t          j        g dg dg          }t          |dd          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |j        d	           t          |j        d
           t          |d d |f         d          \  }}t          ||           t          ||           d S )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   J			999-..QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%AaaadG*---B!!R(((!!R(((((r_   c                    g dg dg}t          |d          \  }}ddg}t          ||d          \  }}t          ||z  |           t          ||           t          |t          d          d          \  }}t          ||           d S )Nrh  r  r  r  ra   rQ   r   rq  rr  s          r]   test_simple_fat_leftzTestQR.test_simple_fat_left  s    YY			"!*%%%1FQ6**B!!a%,,,!!R(((As1vvv..A!"a(((((r_   c                    g dg dg}t          |dd          \  }}}ddg}t          ||dd          \  }}}t          ||z  |           t          |t          d          dd          \  }}}t          ||           d S )	Nrh  r  r  Tr  ra   rQ   r   rq  r  s          r]   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting  s    YY			"
T:::
1dF!!Q55At!!a%,,,!!SVVVT::At!"a(((((r_   c                    g dg dg}t          |d          \  }}ddg}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )Nrh  r  r  r  ra   rQ   rq  r  s          r]   test_simple_fat_rightzTestQR.test_simple_fat_right  s    YY			"!*%%%1FQ""B!!a%,,,!!R(((As1vv&&A!"a(((((r_   c                    g dg dg}t          |dd          \  }}}ddg}t          ||d          \  }}}t          ||z  |           t          |t          d          d          \  }}}t          ||           d S )	Nrh  r  Tr  r  ra   rQ   rz  rq  r  s          r]   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivoting  s    YY			"Dz:::
1dF!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r_   c                     g dg dg dg}t          |          \  }}t          |                                j        |z  t	          d                     t          ||z  |           d S Nrs         @      @ru   ru   rQ   y       @      @rs   rQ   r  rs   )r   r   rV   rW   rF   rm  s       r]   r   zTestQR.test_simple_complex  sg    \\<<<3!uu1!!&&((*q.#a&&999!!a%+++++r_   c                     g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          |t          d          d          \  }}t          ||           d S )Nr  r  r  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!uu1LLAq&))A!!a%,,,As1vvv..A!!R(((((r_   c                     g dg dg dg}t          |          \  }}g d}t          ||          \  }}t          ||z  |           t          |t          d                    \  }}t          ||           d S )Nr  r  r  r  rs   rq  r  s         r]   test_simple_complex_rightz TestQR.test_simple_complex_right  s    \\<<<3!uu1LLAq!!A!!a%,,,As1vv&&A!!R(((((r_   c                    ddgddgddgg}t          |d          \  }}d	d
g}t          ||d          \  }}t          ||z  |           t          ||           t          g d          }t          ||dd          \  }}t          ||d d         z  |           t          |t	          d          d          \  }}t          ||           d S )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00As1vvv..A!"a(((((r_   c                     g dg dg dg}t          |          \  }}g d}t          ||dd          \  }}t          |                                |z  |           d S )Nr  r  r  r  r   T	conjugater   r   r   rV   r  s         r]   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugate  sn    \\<<<3!uu1LLAq&D999A!!&&((Q,33333r_   c                     ddgddgddgg}t          |d          \  }}ddg}t          ||d	d
          \  }}t          |                                |z  |           d S )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	  su    YD	Aq6*!*%%%1IAq&D999A!!&&((Q,33333r_   c                     g dg dg dg}t          |          \  }}t          j        g d          }t          ||d          \  }}t	          ||                                z  |           d S )Nr  r  r  r  Tr  )r   rS   r4   r   r   rV   r  s         r]   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate  sv    \\<<<3!uu1H\\\""AqD111A!!affhh,33333r_   c                 "   t          g dg dg dg          }t          |d          \  }}}t          t          |                    }t	          t          j        |dd          |d d         k                         t          |                                j	        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )	Nr  r  r  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    <<<yyy9::Q&&&1aQLLqu#2#''(((!!&&((*q.#a&&999!!a%111a4111AaaadGB!!R(((!!R(((((r_   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )Nr  r  r  Trz  r  r   r4   r   r   r   r  s          r]   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivoting"  sv    <<<yyy9::D)))
1dLL!!Q55At!!a%,,,,,r_   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )Nr  r  r  Trz  r  r  r  s          r]   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting)  sw    <<<yyy9::D)))
1dLL!!Q666At!!a%,,,,,r_   c                 .   t           j                            d          }d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr  r  rQ   rS   rT   r  r   r   r   rW   rF   r{   ri   rY   r  r|   rn  ro  s          r]   r  zTestQR.test_random0  s    i##D))q 	0 	0A

Aq6""Aa55DAq%acAgs1vv666%a!eQ////		0 	0r_   c                    t           j                            d          }d}t          d          D ]}|                    ||g          }t	          |          \  }}|                    |g          }t          ||d          \  }}t          ||z  |           t          |t          |          d          \  }}t          ||           d S )Nr  r  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    i##D))q 	- 	-A

Aq6""Aa55DAq

A3A1f--EB%a!eR0003q66622EB%a,,,,	- 	-r_   c                    t           j                            d          }d}t          d          D ]}|                    ||g          }t	          |          \  }}|                    |g          }t          ||          \  }}t          ||z  |           t          |t          |                    \  }}t          ||           d S r  r  	r{   ri   rY   r  r|   rn  ro  rs  r  s	            r]   test_random_rightzTestQR.test_random_rightE  s    i##D))q 	- 	-A

Aq6""Aa55DAq

A3A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r_   c           	      b   t           j                            d          }d}t          d          D ]}|                    ||g          }t	          |d          \  }}}t          t          |                    }t          t          j        |dd          |d d         k                         t          |j
        |z  t          |                     t          ||z  |d d |f                    t	          |d d |f                   \  }	}
t          ||	           t          ||
           d S )Nr  r  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   i##D))q 		- 		-A

Aq6""AT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r_   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr     r  rQ   r  r{   ri   r  rY   r  r|   rn  ro  s           r]   test_random_tallzTestQR.test_random_tall_  s    i##D))q 	0 	0A

Aq6""Aa55DAq%acAgs1vv666%a!eQ////		0 	0r_   c                    t           j                            d          }d}d}t          d          D ]}|                    ||g          }t	          |d          \  }}|                    |g          }t          ||d          \  }	}t          ||z  |	           t          |t          |          d          \  }	}t          |	|           d S )Nr  r  r  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    i##D))q 	- 	-A

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

A3A1f--EB%a!eR0003q66622EB%b!,,,,	- 	-r_   c                    t           j                            d          }d}d}t          d          D ]}|                    ||g          }t	          |d          \  }}|                    |g          }t          ||          \  }	}t          ||z  |	           t          |t          |                    \  }	}t          |	|           d S Nr  r  r  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    i##D))q 	- 	-A

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

A3A1%%EB%a!eR0003q66**EB%b!,,,,	- 	-r_   c           	      f   t           j                            d          }d}d}t          d          D ]}|                    ||g          }t	          |d          \  }}}t          t          |                    }	t          t          j        |	dd          |	d d         k                         t          |j
        |z  t          |                     t          ||z  |d d |f                    t	          |d d |f                   \  }
}t          ||
           t          ||           d S )	Nr  r  r  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$   i##D))q 		- 		-A

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

Aq6""Aaj)))DAq%acAgs1vv666%a!eQ///1a&)))1a&))))	* 	*r_   c           	         t           j                            d          }d}d}t          d          D ]/}|                    ||g          }t	          |dd          \  }}}t          t          |                    }	t          t          j        |	dd          |	d d	         k                         t          |j
        |z  t          |                     t          ||z  |d d |f                    t          |j        ||f           t          |j        ||f           t	          |d d |f         d
          \  }
}t          ||
           t          ||           1d S )Nr  r  r  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  sY   i##D))q 	- 	-A

Aq6""AT
;;;GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW5551a&)))1a&)))!!!Q$j111FB%a,,,%a,,,,	- 	-r_   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          |j        |z  t          |                     t          ||z  |           dd S Nr  r  r  rQ   r  r  s           r]   test_random_trapzTestQR.test_random_trap  s    i##D))q 	0 	0A

Aq6""Aa55DAq%acAgs1vv666%a!eQ////		0 	0r_   c           	      f   t           j                            d          }d}d}t          d          D ]}|                    ||g          }t	          |d          \  }}}t          t          |                    }	t          t          j        |	dd          |	d d         k                         t          |j
        |z  t          |                     t          ||z  |d d |f                    t	          |d d |f                   \  }
}t          ||
           t          ||           d S )	Nr  r  r  rQ   Trz  ra   r   r  r  s               r]   test_random_trap_pivotingz TestQR.test_random_trap_pivoting  s$   i##D))q 		- 		-A

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

Aq6""R

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

Aq6""R

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

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

Aq6""R

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

A3"SZZ__"44A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r_   c           	         t           j                            d          }d}t          d          D ]+}|                    ||g          d|                    ||g          z  z   }t	          |d          \  }}}t          t          |                    }t          t          j        |dd          |d d         k                         t          |
                                j        |z  t          |                     t          ||z  |d d |f                    t	          |d d |f                   \  }	}
t          ||	           t          ||
           -d S )	Nr  r  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  sA   i##D))q 		- 		-A

Aq6""R

Aq6(:(:%::AT***GAq!DGGABF1QRR5AcrcF?++,,,%affhhj1nc!ff===%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r_   c                     g dg dg dg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           d S Nrh  rj  rk  Fr   rs   rl  rm  s       r]   r  zTestQR.test_check_finite  sf    YY			999-!%(((1!!#'3q66222!!a%+++++r_   c                    g dg dg dg}t          |d           \  }}t          |d          \  }}t          ||           t          ||           t          |d          \  }}t          ||           t          ||           t          |d          \  }}	t          ||           t          |	|           t          t          t           |fdd	i           t          t          t           |fdd
i           d S )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   YY			999-!4   1 AQB!"a(((!"a((( ARB!"a(((!"a((( ARB!"a(((!"a((( 	iaTGQ<888iaTGQ<88888r_   r  r5  rY   r{  FTr[   c                 b   t          ||          }t          j        ||f|          }t          ||          ^}}}	t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^}}	t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^}}}	t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r9|	\  }
t	          |
j        |f           t	          |
j        t          j                   t          |d|          ^\  }}}}	t	          |j        ||f           t	          |j        |           t	          |j        |f           t	          |j        |           t	          |j        ||f           t	          |j        |           t          |	          |rdndk    sJ |r;|	\  }
t	          |
j        |f           t	          |
j        t          j                   d S d S )	Nr   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<   
 1IIHaV5)))!h///1uQWq!f%%%QWe$$$QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++qsX666	EQWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++!*x@@@1uQWq!f%%%QWe$$$QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++ "158 D D D
cASYA'''SY&&&SY%%%SY&&&QWq!f%%%QWe$$$5zz82aa3333 	,BA1$'''"(+++++	, 	,r_   r?  r@  c                 &   t          ||          }t          j        ||f          }t          |          \  }}t	          |t          j        |                     t	          |t          j        ||f                     t          |d          \  }}}t	          |t          j        |                     t	          |t          j        ||f                     t	          |t          j        |                     t          |d          \  }t	          |t          j        ||f                     t          |d          \  }}t	          |t          j        ||f                     t	          |t          j        ||f                     t          |d          \  \  }}	}t	          |t          j        ||f                     t	          |	t          j        |f                     t	          |t          j        ||f                     d S )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  s   1IIHaV!uu12;q>>***28QF++,,,Q&&&1a2;q>>***28QF++,,,29Q<<(((___28QF++,,,!*%%%128QF++,,,28QF++,,,15)))
cARXq!f--...RXqd^^,,,28QF++,,,,,r_   c                 4   t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     t          j        d          }t          j        d          }t          ||          \  }}t          |t          j        d                     d S )Nr   r   r   )rS   r   r   r   )r{   r|   rs  r  ro  s        r]   test_multiply_emptyzTestQR.test_multiply_emptyi  s    HVHVAq!!ABHV,,---HVHVAq!!ABHV,,---HVHVAq!!ABHV,,-----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4 4 44 4 4	) 	) 	)- - -- - -0 0 0
- 
- 
-
- 
- 
-- - -	0 	0 	0- - -- - -- - - * * *- - -$0 0 0- - -0 0 0
- 
- 
-
- 
- 
-- - -, , ,9 9 90 [S))),,[S))),,[Z%77[Wf--., ., .- 87 -, -,.,` [Z)A)A)ABB- - CB-2. . . . .r_   re  c                   |   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej                            dg d          ej                            dg d          ej                            de          d                                     Zej                            dg d          d             ZdS )TestRQc                     g dg dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S rg  r   r   rW   rF   r{   r|   ro  rn  s       r]   r   zTestRQ.test_simple{  s_    YY			999-!uu1!!ac'3q66222!!a%+++++r_   c                     g dg dg dg}t          |          \  }}t          |d          }t          ||           d S )Nrh  rj  rk  ro  r  )r   r   )r{   r|   ro  rn  ru  s        r]   test_rzTestRQ.test_r  sN    YY			999-!uu1___!!R(((((r_   c                 .   t           j                            d          }d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          ||j        z  t          |                     t          ||z  |           dd S r  rS   rT   r  r   r   r   rW   rF   r{   ri   rY   r  r|   ro  rn  s          r]   r  zTestRQ.test_random  s    i##D))q 	0 	0A

Aq6""Aa55DAq%a!#gs1vv666%a!eQ////		0 	0r_   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )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  |           d S r  r#  r$  s       r]   r  zTestRQ.test_simple_tall  s_    VaVaV$!uu1!!#'3q66222!!a%+++++r_   c                     g dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S )Nr  rj  rs   r#  r$  s       r]   r  zTestRQ.test_simple_fat  sY    YY			"!uu1!!ac'3q66222!!a%+++++r_   c                     g dg dg dg}t          |          \  }}t          ||                                j        z  t	          d                     t          ||z  |           d S r  )r   r   rV   rW   rF   r$  s       r]   r   zTestRQ.test_simple_complex  sg    \\<<<3!uu1!!affhhj.#a&&999!!a%+++++r_   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          ||j        z  t          |                     t          ||z  |           dd S r  r(  r{   ri   r  rY   r  r|   ro  rn  s           r]   r  zTestRQ.test_random_tall      i##D))q 	0 	0A

Aq6""Aa55DAq%a!#gs1vv666%a!eQ////		0 	0r_   c                 2   t           j                            d          }d}d}t          d          D ]c}|                    ||g          }t	          |          \  }}t          ||j        z  t          |                     t          ||z  |           dd S r  r(  r/  s           r]   r  zTestRQ.test_random_trap  r0  r_   c                    t           j                            d          }d}d}t          d          D ]}|                    ||g          }t	          |d          \  }}t          ||j        z  t          |                     t          ||z  |           t          |j	        ||f           t          |j	        ||f           d S )Nr  r  r  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    i##D))q 	* 	*A

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

Aq6""R

Aq6(:(:%::Aa55DAq%a!&&((*nc!ff===%a!eQ////		0 	0r_   c                    t           j                            d          }d}d}t          d          D ]}|                    ||g          d|                    ||g          z  z   }t	          |d          \  }}t          ||                                j        z  t          |                     t          ||z  |           t          |j
        ||f           t          |j
        ||f           d S )Nr  r  r  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    i##D))q 	* 	*A

Aq6""R

Aq6(:(:%::Aaj)))DAq%a!&&((*nc!ff===%a!eQ///1a&)))1a&))))	* 	*r_   c                     g dg dg dg}t          |d          \  }}t          ||j        z  t          d                     t          ||z  |           d S r  r#  r$  s       r]   r  zTestRQ.test_check_finite  sf    YY			999-!%(((1!!ac'3q66222!!a%+++++r_   r  r5  rY   r[   c                 |   t          ||          }t          j        ||f|          }t          |          \  }}t	          |j        ||f           t	          |j        ||f           t	          |j        |           t	          |j        |           t          |d          }t	          |j        ||f           t	          |j        |           t          |d          \  }}t	          |j        ||f           t	          |j        |           t	          |j        ||f           t	          |j        |           d S )Nr   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+    1IIHaV5)))!uu1QWq!f%%%QWq!f%%%QWe$$$QWe$$$qsOOOQWq!f%%%QWe$$$!*%%%1QWq!f%%%QWe$$$QWq!f%%%QWe$$$$$r_   r?  r@  c                 $   t          ||          }t          j        ||f          }t          |          \  }}t	          |t          j        ||f                     t	          |t          j        |                     t          |d          }t	          |t          j        ||f                     t          |d          \  }}t	          |t          j        ||f                     t	          |t          j        ||f                     d S )Nro  r  r  )r:  rS   r   r   r   r  )r{   r  rY   r  r|   ro  rn  s          r]   r   zTestRQ.test_empty  s    1IIHaV!uu128QF++,,,2;q>>***qsOOO28QF++,,,!*%%%128QF++,,,28QF++,,,,,r_   N)r   r   r   r   r&  r  r  r  r  r   r  r  r3  r"  r6  r  r   r   r   r  r>  r   r   r_   r]   r!  r!  z  s}       , , ,) ) )0 0 0, , ,, , ,, , ,, , ,0 0 00 0 0
* 
* 
*0 0 0
* 
* 
*, , , [S))),,[S))),,[Wf--% % .- -, -,%( [Z)A)A)ABB- - CB- - -r_   r!  c                       e Zd Zd Zd Zej                            dd ej	        d           d ej	        d          dgfd ej	        d          d ej	        d           dgfd	dd ej	        d           ej	        d           gfd
 ej	        d           ej	        d           ddgfd  ej	        d          d ej	        d           dgfg          d             Z
d Zd Zej                            deeej        eej        g          d             Zej                            dd	d
g          ej                            dddg          ej                            dej        ej        ej        ej        g          d                                     Zej                            dddg          ej                            dej        ej        ej        ej        g          d                         ZdS )	TestSchurc                    t          ||z  |                                j        z  |||d           t          ||                                j        z  t          j        t          |                    z
  dd|d           d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rV   rW   rS   rF   re   )r{   r|   tr  r   r   s         r]   check_schurzTestSchur.check_schur  s    A
*ADt H	J 	J 	J 	J 	AFFHHJA7 2	4 	4 	4 	4 	4 	4r_   c           	         g dg dg dg}t          |          \  }}|                     |||dd           t          |d          \  }}t          t          j        t          t          |                              o-t          j        t          t          |                                         |                     |||dd           t          ||          \  }}|                     |||dd           d S )Nri     rs   rj  rB  rs   rv   r+  +<r   r   r   )r   r>  r   rS   r3  r=   r?   r   )r{   r|   r=  r  tczctc2zc2s           r]   r   zTestSchur.test_simple  s    ZZJJJ/Qxx1Aqu5999q)$$BuYr]]++,,Mimm8L8L1M1MNNNBU;;;2r??SC5u=====r_   zsort, expected_diag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          ||          \  }}}|                     |||dd           t          t          j        |          |d	
           t          d|           d S )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   s     """! 14(((
1dAqu5999

M>>>>Qr_   c                     g dg dg dg dg}t          t          t          |d           t          t          t          |d           d S )NrQ  rR  rS  rV  unsupportedrX  ra   )r  r  r   r^  s     r]   test_sort_errorszTestSchur.test_sort_errors4  sc    """! 	j%????j%333333r_   c                     g dg dg dg}t          |d          \  }}t          ||z  |                                j        z  |           d S )Nr@  rj  rB  Fr   )r   r   rV   rW   )r{   r|   r=  r  s       r]   r  zTestSchur.test_check_finite<  sY    ZZJJJ/QU+++1!!a%!&&((*"4a88888r_   r   c                    t          j        d|          }t          |          \  }}t          t          j        d|                    \  }}t	          |t          j        d                     t	          |t          j        d                     |j        |j        k    sJ |j        |j        k    sJ t          |d          \  }}}t	          |t          j        d                     t	          |t          j        d                     t          |d           |j        |j        k    sJ |j        |j        k    sJ d S )Nr   r   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/   HV2&&&Qxx1rvar***++B28F++,,,28F++,,,w"(""""w"(""""15)))
1d28F++,,,28F++,,,T1w"(""""w"(""""""r_   rA   outputrN  r   r[   c                     t          j        ddgddgg          }t          |                    |          ||          d         }|dk    r|dk    sn|dk    sJ d S d S )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  sl      Jb	As8,-- QXXe__4???C EMMtqyyytqyyyyyyyyr_   c                    t          j        ddgddgg          }|dk    o|t           j        t           j        hv d	fd	}t	          |                    |          ||          d         }r|dk    sn|dk    sJ d S d S )
Nrg  r   rQ   rN  c                     r7t          j        |           rJ |t          j        |          sJ | |dz  z   }nt          j        |           sJ |J | }|j        dk    S )NrP   r  )rS   iscomplexobjisrealr   )r  r  r  all_reals      r]   rA   z1TestSchur.test_gh_13137_sort_custom.<locals>.sorty  su     ?1-----}1}}}"Hq)))))yyy6E>!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     Jb	As8,--6>Ge
BJ/G&G		" 		" 		" 		" 		" 		" QXXe__4???C$3tqyyy$!))))))yyr_   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 4 4> > > [
7271::+tWRWQZZ5	6
'"'!**cGBGAJJ;5	6
$WRWQZZ'"'!**5	6
'"'!**wrwqzzk45	6

wrwqzz3TB	C		E 
 
 
4 4 49 9 9
 [TC
GR\#RSS# # TS#  [VeU^44[X	':;;[Wrz2:')|R]'D E E9 9E E <; 549$ [X	':;;[Wrz2:')|R]'D E E4 4E E <;4 4 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                            d	eeeeeg          d
             ZdS )TestHessenbergc                     g dg dg dg}g dg dg dg}t          |d          \  }}t          |j        |z  |z  |           t          ||d	
           d S )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@ra   calc_qr  decimalr   r   rW   r{   r|   h1rm   rn  s        r]   r   zTestHessenberg.test_simple  s    __^^ .--...!!!# !A&&&1!!#'A+q111!!R333333r_   c                     g dg dg dg}t          |d          \  }}t          |                                j        |z  |z  |           d S )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  sc    __ !A&&&1!!&&((*q.1"4a88888r_   c                     g dg dg dg dg dg dg dg}t          |d	          \  }}t          |j        |z  |z  |           d S )
N)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  s    """""""""""""""""""""$ !A&&&1!!#'A+q11111r_   c                     t          j        d          }d|d<   t          |d          \  }}t          |j        |z  |z  |           d S )Nrs   rQ   )r   r   ra   r}  )rS   rF   r   r   rW   r  s       r]   test_simple3zTestHessenberg.test_simple3  sN    F1II%!A&&&1!!#'A+q11111r_   c                     t           j                            d          }d}t          d          D ]H}|                    ||g          }t	          |d          \  }}t          |j        |z  |z  |           Id S )Nr  r  rQ   ra   r}  )rS   rT   r  r   r   r   rW   r{   ri   rY   r  r|   rm   rn  s          r]   r  zTestHessenberg.test_random  s    i##D))q 	6 	6A

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

Aq6""R

Aq6(:(:%::Aa***DAq%affhhj1nq&8!<<<<	= 	=r_   c                     g dg dg dg}g dg dg dg}t          |dd	          \  }}t          |j        |z  |z  |           t          ||d
           d S )Nrs  rt  rx  rz  r{  r|  ra   F)r~  r   r  r  r  r  s        r]   r  z TestHessenberg.test_check_finite  s    __^^ .--...!!!# !AE:::1!!#'A+q111!!R333333r_   c                 >   ddgddgg}t          |d          \  }}t          |t          j        d                     t          ||           ddgdd	gg}t          |d          \  }}t          |t          j        d                     t          ||           d S )
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!!RVAYY///!!Q'''D\D%=)Aa(((B!"bfQii000!"a(((((r_   r   c                    t          j        d|          }t          |          }|j        dk    sJ |j        t          t          j        d|                    j        k    sJ t          |d          \  }}t          |d          \  }}|j        dk    sJ |j        |j        k    sJ |j        dk    sJ |j        |j        k    sJ d S )Nr   r   rs   Tr}  )rS   r   r   r@   r[   rF   )r{   r   r|   rm   rn  h3r  s          r]   r   zTestHessenberg.test_empty  s    HV2&&&qMMw&    w*RVAR%8%8%899?????!D)))1Ad+++Bw&    w"(""""w&    w"(""""""r_   N)r   r   r   r   r   r  r  r  r"  r  r  r   r   r   rd   r   r;   r   r<   r   r   r_   r]   rq  rq    s        	4 	4 	49 9 9	2 	2 	22 2 26 6 6= = =	4 	4 	4
) 
) 
) [TC)#LMM# # NM# # #r_   rq  zBuild Dependenciesblasnameversionc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestQZc                    t           j                            d          }d}|                    ||g                              t                    }|                    ||g                              t                    }t          ||          \  }}}}t          ||z  |j        z  |d           t          ||z  |j        z  |d           t          ||j        z  t          |          d           t          ||j        z  t          |          d           t          t          j
        t          |          dk                         d S )N90  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   i##E**JJ1v%%g..JJ1v%%g..!QxxB1!!b&13,1====!!b&13,1====!!ac'3q661====!!ac'3q661====tBxx1}%%&&&&&r_   c                 2   t           j                            d          }d}|                    ||g          }|                    ||g          }t          ||          \  }}}}t	          ||z  |j        z  |           t	          ||z  |j        z  |           t	          ||j        z  t          |                     t	          ||j        z  t          |                     t          t          j        t          |          dk                         d S )Nr  ru   r   
rS   rT   r  r   r   rW   rF   r   r   r5   r  s	            r]   test_qz_doublezTestQZ.test_qz_double  s    i##E**JJ1vJJ1v!QxxB1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r_   c                    t           j                            d          }d}|                    ||g          d|                    ||g          z  z   }|                    ||g          d|                    ||g          z  z   }t          ||          \  }}}}t	          ||z  |                                j        z  |           t	          ||z  |                                j        z  |           t	          ||                                j        z  t          |                     t	          ||                                j        z  t          |                     t          t          j	        t          |          dk                         t          t          j	        t          |          j        dk                         d S )Nr  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	  sj   i##E**JJ1vCJJ1v$6$6!66JJ1vCJJ1v$6$6!66!QxxB1!!b&16688:"5q999!!b&16688:"5q999!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&tBxx})**+++++r_   c                    t           j                            d          }d}|                    ||g          d|                    ||g          z  z                       t                    }|                    ||g          d|                    ||g          z  z                       t                    }t          ||          \  }}}}t          ||z  |                                j        z  |d           t          ||z  |                                j        z  |d           t          ||                                j        z  t          |          d           t          ||                                j        z  t          |          d           t          t          j        t          |          dk                         t          t          j        t          |          j        dk                         d S )Nr  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	  s   i##E**ZZA"SZZA%7%7"77??	JJZZA"SZZA%7%7"77??	JJ!QxxB1!!b&16688:"5q!DDDD!!b&16688:"5q!DDDD!!affhhj.#a&&!DDDD!!affhhj.#a&&!DDDDtBxx1}%%&&&tBxx})**+++++r_   c                 6   t           j                            d          }d}|                    ||g          }|                    ||g          }t          ||d          \  }}}}||z  |                                j        z  }	t          |	j        |           t          |	j        d           ||z  |                                j        z  }
t          |
j        |           t          |
j        d           t          ||                                j        z  t          |                     t          ||                                j        z  t          |                     t          t          j        t          |          dk                         d S )Nr  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 	  sJ   i##E**JJ1vJJ1v!Qy111B1Vaffhhj !"'1---!"'1---Vaffhhj !"'1---!"'1---!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&&&r_   c                     t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }t          t          t          ||d	 
           d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r        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	  s     H------,,,,,,. / /
 H++++++++++++- . .
 	j"a1M1MNNNN	F 	Fr_   c                 6   t           j                            d          }d}|                    ||g          }|                    ||g          }t          ||d          \  }}}}t	          ||z  |j        z  |           t	          ||z  |j        z  |           t	          ||j        z  t          |                     t	          ||j        z  t          |                     t          t          j        t          |          dk                         d S )Nr  ru   Fr   r   r  r  s	            r]   r  zTestQZ.test_check_finite	  s    i##E**JJ1vJJ1v!QU333B1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r_   N)
r   r   r   r  r  r  r  r  r  r  r   r_   r]   r  r    s        
' 
' 
'
' 
' 
', , ,, , ,' ' ' 5F 5F 5FF
' 
' 
' 
' 
'r_   r  c                   f    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd ZdS )	TestOrdQZc                 6   t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }t          j        g d	g d
g dg dg          }t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }t          j        d          }t          j        ddg          }t          j        ddg          }	|||||	g| _        |||||	g| _        d S )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )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    X $ $ $& & &% % %' ' '( ) ) XDDDDDDDDDDDDF G G X///.........0 1 1
 X}}}$}}$}}$}}& ' ' X'''''''''''') * * X)))''''''''') * * VAYYWaV__ WaV__RR$RR$r_   c                     t          j        d          5  fdt          | j        | j                  D             }d d d            n# 1 swxY w Y   t          |          S )Nraiser   c                 :    g | ]\  }}t          ||           S )rX  )r    ).0AiBirA   s      r]   
<listcomp>z'TestOrdQZ.qz_decomp.<locals>.<listcomp>	  s,    NNNB5Rd+++NNNr_   )rS   r   zipr\   r   tuple)r{   rA   rets    ` r]   	qz_decompzTestOrdQZ.qz_decomp	  s    [W%%% 	O 	ONNNN#dfdf:M:MNNNC	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	OSzzs   'A

AAc
           	      *   t          j        |j         }
t          ||j                                        z  |
           t          |	|	j                                        z  |
           t          ||z  ||	z             t          ||z  ||	z             t          t          j        |d          t          j        |j                             t          t          j        |d          t          j        |j                             t          |j        d                   D ]{}|dk    r|||dz
  f         dk    r||j        d         dz
  k     r||dz   |f         dk    rt          |||dz   ||dz   f         |||dz   ||dz   f                   \  }}|d         j        dk     r
|ddg         }|||dz            |||dz            z  }|d         j        dk     r
|ddg         }t          ||           ||         dk    r>||         dk    r2t          |||f         d           t          |||f         d           #||         dk    rt          |||f         d           It          |||f         |||f         z  ||         ||         z             }t          |          }d}t          |j        d                   D ]H} |t          j        ||         g          t          j        ||         g                    }|s|rJ |}Id S )Nr   r   r   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   VQW!!achhjj."555!!achhjj."555!!b&!a%000!!b&!a%000272r??BHRX,>,>???272r??BHRX,>,>???qwqz"" 	M 	MA 1uu1a!e8))28A;?""r!a%(|q'8'8r!AE'1QU7"23R!a%1q58H5IJJq 8=1$$!1a&MEAa!eGnT!AE']2q6;??q!f+C)%55558q==T!W\\ AqD1--- AqD1----!W\\ AqD1----'1a4AqD(958DG;KLLLL"4((qwqz"" 	 	Agbhaz22BHd1gY4G4GHHG  #""""HH	 	r_   c                     |                      |          }t          || j        | j                  D ]\  }}} | j        |||g|R   d S r=  )r  r  r\   r   r  )r{   rA   r  retir  r  s         r]   	check_allzTestOrdQZ.check_all
  sc    nnT""TVTV44 	, 	,LD"bDJr2t+d+++++	, 	,r_   c                 0    |                      d           d S )NrI  r  r?  s    r]   test_lhpzTestOrdQZ.test_lhp
      ur_   c                 0    |                      d           d S )NrK  r  r?  s    r]   test_rhpzTestOrdQZ.test_rhp
  r  r_   c                 0    |                      d           d S )NrL  r  r?  s    r]   test_iuczTestOrdQZ.test_iuc
  r  r_   c                 0    |                      d           d S )NrM  r  r?  s    r]   test_ouczTestOrdQZ.test_ouc
  r  r_   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S Nr   r   FrS   
empty_likeboolr   r  r  outnonzeros       r]   rA   z TestOrdQZ.test_ref.<locals>.sort
  M    -...CAvG!CMgJqz171<CLJr_   r  r{   rA   s     r]   test_refzTestOrdQZ.test_ref
  +    	 	 	 	tr_   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S r  r  r  s       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|R   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   d S )Nra   rQ   rI  rX  )r    r\   r   r  )r{   r  s     r]   test_diff_input_typeszTestOrdQZ.test_diff_input_types3
  s    DF1Itvayu555
46!9dfQi55555DF1Itvayu555
46!9dfQi5555555r_   c                 v   t          j        d          }t          j        ddg          }dddgfdddgfdddgfdddgfg}t          j        d          }t          j        d	d
g          }dddgfdddgfdddgfdddgfg}t          j        d          }t          j        ddg          }ddt           j        gfddt           j        gfdt           j        dgfg}	t          j        d          }
t          j        ddg          }ddt           j        gfddt           j        gfdt           j        dgfg}t          j        ddg          }t          j        ddg          }ddt           j        gfddt           j        gfg}||||
|g}|||||g}|||	||g}t          |||          D ]\  }}}|D ]\  }}t          |||          \  }}}}}}|dk    }|dk    }t          j        |          }t           j        |||z  <   t           j        || |z  <   ||          ||          z  || <   t          ||           d S )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    VAYYWb#YdAY'aY'dAY'aY')	 VAYYWgz*++k>:;nk:;k>:;nk:;=	
 VAYYWaV__c26]+c26]+bfc]+-	 VAYYWb!WdBF^,dBF^,bfd^,.	 WaV__WaXa[)a[)+	 RR RR y)Y	J!$Q8!4!4 		5 		5BI-6 5 5))*/BW*E*E*E'1eT1a!M%((#%6%%- $&F5&5.!!5&M$v,65&	 0!44445		5 		5r_   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r_   r]   r  r  	  s        4% 4% [4%l  
, , ,\, , ,        	 	 		 	 	6 6 6-5 -5 -5 -5 -5r_   r  c                   ~    e Zd Zej                            d          d             Zej        j        d             ZdS )TestOrdQZWorkspaceSizeru   c                 T   t           j                            d          }d}t           j        t           j        fD ]j}|                    ||f                              |          }|                    ||f                              |          }t          ||d d          }kt           j        t           j        fD ]j}|                    ||f                              |          }|                    ||f                              |          }t          ||d d          }kd S )Nr     c                     | |k     S r=  r   r  r  s     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*   i##E**z2:. 	% 	%F

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

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

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

Aq6""))&11Aa!A!A&( ( (AA	( 	(r_   c                    t           j                            d          }d}t           j        t           j        t           j        t           j        fD ]o}|                    ||f                              |          }|                    ||f                              |          }t          ||d          \  }}}}	}
}pd S )Nr  r  rM  rX  )	rS   rT   r  r;   r%  r&  r<   rX   r    )r{   ri   rX  r  r\   r   SrW   r  r  Ur4  s               r]   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc}
  s    i##E**z2:r}blK 	> 	>F

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

Aq6""))&11A&+Aqu&=&=&=#Aq%q!!	> 	>r_   N)	r   r   r   r   r   	fail_slowr  rF  r  r   r_   r]   r  r  j
  s_        [1( ( (" [> > > > >r_   r  c                       e Zd Zd ZdS )TestDatacopiedc                    ddl m} t          ddgddgg          }t          |          |                                }|                                } G fdd          } G fdd	          } |            } |            }|d
fd
f|df|d
f|d
f|d
ffD ]=\  }	}
t          |	          }t           |||	          |
t          |	                     >d S )Nr   )_datacopiedra   rQ   rs   c                       e Zd Zd fd	ZdS )-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$  
  s3               r_   r(  c                       e Zd Z j        ZdS )-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r'  s   r]   Fake2r*  
  s        "#"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
  sV   444444QFQF#$$AJJHHJJVVXX	 	 	 	 	 	 	 	 	 		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 UWWUWWZ!UaY %[2u+E{D 	- 	-LD&$--CS$//!%d- - - - -	- 	-r_   N)r   r   r   r7  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           d	S )
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_floatrC  
  si     	s"(###A 	afQcAAAAAGtr_   ppc64lezcrashes on ppc64lec                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z4Check linalg works with non-aligned memory (float64)i$  r   r  r  r9  r<  Tr=  N)	r:   rS   r?  r@  rA  r   r@   r
   rW   rB  s     r]   test_aligned_memrF  
  si    
 	s"(###A 	afQc???AAGtr_   c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z>Check that complex objects don't need to be completely alignediH  r   ri  r  r9  r<  Tr=  N)	r9   rS   r?  r@  rA  r   r@   r
   rW   rB  s     r]   test_aligned_mem_complexrH  
  si     	d"(###A 	afQcAAAAAGtr_   c                 b   t          |          }t          t          |                    D ]}|d d          }t          ||         t          j                  rt	          j        ||         j        ||         j        j	        z  dz   t          j
                  }t	          j        |j        d||         j        ||         j                  }||         j        |_        ||         |d<   |||<    | |i | t          ||         j                  dk    r||         j        ||<    | |i | d S )Nri  r   r  r9  .ra   )r!  r   re   rc   rS   rE   r9   r   r[   itemsizer?  r@  rA  r@   rW   )funcr[  kwargsr   r|   r  s         r]   check_lapack_misalignedrM  
  s)   ::D3t99 # #GadBJ'' 	#!A$)AaDJ$779JJJBrwq!	%&qTZ1 1 1BtzBHdBsGAaDD!v1Q4:""tv!a"6"""# #r_   z0Ticket #1152, triggers a segfault in rare cases.)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/          |||           d S )NrB  r   r  r<  i N  r  r9  Tr=  )overwrite_b)r>  rP  )rS   rF   r   r:   r@   r?  r@  rA  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   rM  )	r  Rr  r   LUpivrK  r[  rL  s	            r]   test_lapack_misalignedrU  
  s+    	rA
	#AAG
	%rx(((A
afQc???AAG
AllGB1$.../qdDT2223!t---.dt4445S	1~t'='='=>QFDTtDDDE1$.../1$.../1$.../qdDFF#qdDT2223tTd3334!t---.!t---.!t5556QD$40001!! 4 4tV$ 	 dF3333%4 4r_   c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )TestOverwritec                 `    t          t          dg           t          t          ddg           d S Nr  )rG   r
   r?  s    r]   test_eigzTestOverwrite.test_eig  s/    C&***C&&!122222r_   c                 `    t          t          dg           t          t          ddg           d S rY  )rG   r   r?  s    r]   	test_eighzTestOverwrite.test_eigh  s/    D6(+++D66"233333r_   c                 2    t          t          dg           d S Nr  )rG   r   r?  s    r]   r  zTestOverwrite.test_eig_banded
      J11111r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_eigvalszTestOverwrite.test_eigvals      GfX.....r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_eigvalshzTestOverwrite.test_eigvalsh  s    Hvh/////r_   c                 2    t          t          dg           d S r^  )rG   r   r?  s    r]   r  z!TestOverwrite.test_eigvals_banded  s    NVH55555r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_hessenbergzTestOverwrite.test_hessenberg  r_  r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_lu_factorzTestOverwrite.test_lu_factor  s    Ix00000r_   c                     t          j        g dg dg dg          }t          |          t          fddg           d S )Nrr   r  )r  ri  ri  c                 $    t          |           S r=  )r   )r   xlus    r]   rO  z-TestOverwrite.test_lu_solve.<locals>.<lambda>  s    hsA&6&6 r_   )rs   )rS   r4   r   rG   )r{   r  rl  s     @r]   test_lu_solvezTestOverwrite.test_lu_solve  sR    HiiiIII677ll6666?????r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_luzTestOverwrite.test_lu!      B)))))r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_qrzTestOverwrite.test_qr$  rp  r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_rqzTestOverwrite.test_rq'  rp  r_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   
test_schurzTestOverwrite.test_schur*  s    EF8,,,,,r_   c                 Z    t          d dgt          j        t          j        g           d S )Nc                 "    t          | d          S )Nr   )r   r|   s    r]   rO  z2TestOverwrite.test_schur_complex.<locals>.<lambda>.  s    eAy&9&9 r_   r  )dtypes)rG   rS   r;   r%  r?  s    r]   test_schur_complexz TestOverwrite.test_schur_complex-  s9    99F8$&J
#;	= 	= 	= 	= 	= 	=r_   c                 V    t          t          dg           t          d dg           d S )Nr  c                 $    t          | d          S )NrI  r  )r   ry  s    r]   rO  z(TestOverwrite.test_svd.<locals>.<lambda>3  s    c!7&C&C&C r_   )rG   r   r?  s    r]   test_svdzTestOverwrite.test_svd1  s0    C&***CCfXNNNNNr_   c                 2    t          t          dg           d S rY  )rG   r   r?  s    r]   test_svdvalszTestOverwrite.test_svdvals5  rb  r_   N)r   r   r   rZ  r\  r  ra  rd  r  rg  ri  rm  ro  rr  rt  rv  r{  r~  r  r   r_   r]   rW  rW    s
       3 3 34 4 42 2 2/ / /0 0 06 6 62 2 21 1 1@ @ @
* * ** * ** * *- - -= = =O O O/ / / / /r_   rW  c                    t          j        | dft                                        |          }t          j        |          j        }d|z  }t          |          }t          |j        | df           t          ||
                                |           t          |j                  }t          |j        d           t          ||
                                |           | dk    r|st           j                            d          }|                    | d          |                    d|           z  }|d|                    | d          z  |                    d|           z  z   }|                    |          }t          |d	
          }t          |j        | df           t          |d
          }t          |j        | df           d S d S d S )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  s   
Ae$$$++E22A
(5//
C
*CQA1a&!!!Aqvvxxc****QS		A&!!!Aqvvxxc****1uuXui##A&&HHQNNSXXa^^+sxx1~~%A66HHUOO$QWq!f%%%$QWq%j))))) uuur_   ri  z"test only on 64-bit, else too slowc                      d} 	 t          | t          j        d           d S # t          $ r}t	          d          |d }~ww xY w)Ni T)r  z.memory error perhaps caused by orth regression)r  rS   r%  MemoryErrorAssertionError)rY   r  s     r]   test_orth_memory_efficiencyr  T  sb     	AArzD111111   <
 
	s   " 
A<Ac                      t           j        t           j        t           j        t           j        g} g d}t          j        | |          D ]\  }}t          ||           d S )Nra   rQ   rs   rB  r  )rS   r;   r%  r<   r&  	itertoolsproductr  )rz  r'  r   rY   s       r]   	test_orthr  e  s`    j"*blBMBFE"6511  AAr r_   r   c                     t          j        d|           }t          j        d|           }t          |          }|j        t          |          j        k    sJ |j        dk    sJ d S Nr   r   rQ   )rS   r   rF   r   r[   r@   )r   r|   rB  oas       r]   test_orth_emptyr  k  si    
r"""A				B	aB8tBxx~%%%%8vr_   c                   R   e Zd Zd Zej                            deee	j
        ee	j        g          d             Zej                            dddg          ej                            dddg          ej                            dd	d
g          d                                     ZdS )TestNullSpacec                    t           j                            d          }t           j        t           j        t           j        t           j        g}g d}t          j        ||          D ]\  }}t          j	        d|f|          }t          j
        |          j        }d|z  }t          |          }	t          |	j        ||dz
  f           t          ||	z  d|           t          |j                  }	t          |	j        d           t          |j        |	z  d|           |                    d|dz  z   |          }t          |          }	t          |	j        ||dz
  |dz  z
  f           t          ||	z  d|           |d	k    rt           j                            d          }|                    |d	          |                    d	|          z  }|d
|                    |d          z  |                    d|          z  z   }|                    |          }t          |d          }	t          |	j        ||d	z
  f           t          |d          }	t          |	j        ||dz
  f           d S )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   rz  r'  r   rY   r  r  r   r  s
             r]   test_null_spacezTestNullSpace.test_null_spacev  sA   i##A&&*bj",F"""&vu55 	2 	2EBAb)))A(2,,"C*C1A1ac(+++AE13////13A&)))AC!GQS1111		!ad(A&&A1A1a!eadl"3444AE13////1uui++A..HHQNNSXXa^^3sxx1~~-A>>HHRLLq---QWq!a%j111q---QWq!a%j111;	2 	2r_   r   c                     t          j        d|          }t          j        d|          }t          |          }|j        dk    sJ |j        t          |          j        k    sJ d S r  )rS   r   rF   r%   r@   r[   )r{   r   r|   rB  nsas        r]   test_null_space_emptyz#TestNullSpace.test_null_space_empty  sj    HV2&&&VAR   mmyF""""yJrNN0000000r_   r>  TFr   r  r  rI  c                 4   t           j                            d          }d}|                    d|dz  z   |f          }t	          |                                |||          }t          ||z  dt          j        |j                  j	        dz             d S )	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     i##$;<<QT1..qvvxx[|%24 4 4Aqrx'8'8'<S'@AAAAAAr_   N)r   r   r   r  r   r   r   rd   r   rS   r;   r   r<   r  r  r   r_   r]   r  r  u  s        #2 #2 #2J [TC
GR\#RSS1 1 TS1 []T5M::[^dE];;[_w.@AAB B BA <; ;:B B Br_   r  c            	      	   t          dt                    } | d d d df         }| d d dd f         }t          t          ||          t          j        dz  gdz  d           t          t          ||          t          j        dz  gdz  d           ||fD ]?}t          t          ||          t	          j        |j        d                   d           @t	          j        g dg dg d	g d
g          }d}t          t          |d d d df         |d d dd f                   d         |d           t          t          |d d dd f         |d d d df                   d         |d           d}t          t          |d d d df         |d d dgf                   |d           t          t          |d d dgf         |d d d df                   |d           d}t          t          |d d d df         |d d dgf                   |d           t          t          |d d dgf         |d d d df                   |d           d}t          t          |d d d df         |d d dd f                   |dgd           t          t          t          |d         |           t          t          t          ||d                    t          t          t          |d d         |           t	          j        g dg dg dg dg dg          }t	          j        g dg dg dg dg dg          }t	          j        t          j        dz  ddg          }t          t          ||          |d           dgdgg}ddgddgg}t          t          ||          dd           t          t          ||          dd           t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     t	          j        d          }t	          j        d          }t          t          ||          t	          j        d                     d S ) 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    s7   EA	!!!RaR%A	!!!QRR%AOAq))BEBJ<!+;%HHHHOAq))BEBJ<!+;%HHHHV $ $1--rx
/C/C"	$ 	$ 	$ 	$ 	$ 		U	U	U	W	W	W	X	X	X	V	V	V	X	Y 	YA
 !HOAaaa!eHa122h77:H       OAaaaeHa2A2h77:H        HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHa122h77(A        *oqtQ777*oq!A$777*oq"vq999 	)))))))))))	 	 	A
 	)))))))))))	 	 	A
 xq!Q((HOAq))8%@@@@
 A3A
!q!fAOAq))2E::::OAq))2E:::: 	A
AOAq))28D>>:::
A
AOAq))28D>>:::
A
AOAq))28D>>:::::r_   c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TestCDF2RDFc                 .    t          j        d||          S )Nz...ij,...jk->...ik)rS   einsum)r{   r|   r   s      r]   matmulzTestCDF2RDF.matmul  s    y-q!444r_   c                 v    t          |                     ||          |                     ||                     d S 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          ||          \  }}|                     |||           d S )Nr   r   )rS   r   r&   r  r{   r  r}   rl   wrr   s         r]   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0real   s[    HVx{{BHV,,1ABb"a(((((r_   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nra   rQ   rs   r   rS   r4   r7   r
   r&   r  r  s         r]   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_real  sd    Hq!fq"g&''y}}Q1ABb"a(((((r_   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nra   rQ   r   r  r  s         r]   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complex  sd    Hq!fr1g&''y}}Q1ABb"a(((((r_   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nrr   rt   r  r  s         r]   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_real  sj    HiiiIII677y}}Q1ABb"a(((((r_   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S Nrr   )r   r  ru   )r   r  r  r  r  s         r]   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex  sj    HiiiJJJ788y}}Q1ABb"a(((((r_   c                 D   t          dd          D ]}t          j                            d           t          j                            d||          }t          j                            |          \  }}t          ||          \  }}|                     |||           d S )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  s    q! 	- 	-AINN9%%%	sAq))A9==##DAqQ]]FB!!"b!,,,,	- 	-r_   c                    t          dd          D ]p}t          j                            dd||          }t          j                            |          \  }}t          ||          \  }}|                     |||           qd S )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(  s    q! 	- 	-A	r2q!,,A9==##DAqQ]]FB!!"b!,,,,		- 	-r_   c                     t          j        d          t          j        d          }}t          t          t
          ||           d S )Nr   )rQ   )rS   r   r4   r  r  r&   r{   r}   rl   s      r]   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error0  s5    x||RXd^^1j'1a00000r_   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nrs   rv   rQ   rS   r:   r  r  r  r&   r  s      r]   r  z!TestCDF2RDF.test_not_square_error4  sE    y||RYq\\11!Q771j'1a00000r_   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           d S r  rS   r4   r7   r
   r  r  r&   r{   r  r}   rl   s       r]   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error9  sU    HiiiJJJ788y}}Q1j'1a00000r_   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nrs   r   r  r  r  s      r]   test_non_associated_errorz%TestCDF2RDF.test_non_associated_error?  sE    y||RYr]]221a881j'1a00000r_   c                    t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           t          j        g dg dg dgg dg dg dgg          }t           j                            |          \  }}t	          t
          t          ||           d S )Nrr   r   )rQ   ru   y      @      r  r  s       r]   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairsD  s    HiiiLLL9::y}}Q1j'1a000 HYY			<<<0YY			<<<0
   y}}Q1j'1a00000r_   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r_   r]   r  r    s        5 5 5
 
 
) ) )) ) )) ) )) ) )) ) )- - -- - -1 1 11 1 1
1 1 11 1 1
1 1 1 1 1r_   r  )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   rC  rF  rH  rM  xfailrU  rW  r  rF  r[   intprJ  r  r  r   rd   r   r  r  r  r  r   r_   r]   <module>r     sn
        



    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  * * * * * *N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NA A A A A A A A A A A A A A A A A A A A A A $ # # # # # 4 4 4 4 4 4 # # # # # #; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 8 7 7 7 7 7 ( ( ( ( ( ( 3 3 3 3 3 3 ' ' ' ' ' ''''''''   FFF <<'U+;8+;+=+=AU+U (-E     z2:&,.	~	%
  4'= '= '= '= '= '= '= '=TO& O& O& O& O& O& O& O&ff$ f$ f$ f$ f$ f$ f$ f$P	~! ~! ~! ~! ~! ~! ~! ~!BJ$ J$ J$ J$ J$ J$ J$ J$XM# M# M# M# M# M# M# M#^    M    G$;<<r   =<; ; ; ; ; ; ; ;|E E E E E E E EE
. E
. E
. E
. E
. E
. E
. E
.PN- N- N- N- N- N- N- N-b}4 }4 }4 }4 }4 }4 }4 }4@Y# Y# Y# Y# Y# Y# Y# Y#x  $ #	/08@M./7	BLp' p' p' p' p' p' p' p'fG5 G5 G5 G5 G5 G5 G5 G5T> > > > > > > ><- - - - - - - -6
 
 
 $H$&&)3/  1 1
 
1 1
  # # #$ uL  N N4 4N N4@5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/p* * * *6 HBHRW%%.2?  A A A A    UBJNOO  PO8B 8B 8B 8B 8B 8B 8B 8BvB; B; B;J[1 [1 [1 [1 [1 [1 [1 [1 [1 [1s   C C'&C'